当前位置: 首页 > news >正文

重生之我在学Vue--第7天 Vue 3 数据请求(Axios)

重生之我在学Vue–第7天 Vue 3 数据请求(Axios)

文章目录

  • 重生之我在学Vue--第7天 Vue 3 数据请求(Axios)
    • 前言
    • 一、Axios 基础:从安装到实战
      • 1.1 安装与全局配置
      • 1.2 四大请求方法实战
        • GET 请求:获取任务列表
        • POST 请求:新增任务
        • PUT & DELETE 请求:更新与删除
    • 二、拦截器:打造智能请求管道
      • 2.1 请求拦截器(统一添加 Token)
      • 2.2 响应拦截器(统一错误处理)
    • 三、Axios + Pinia 黄金组合
      • 3.1 在 Store 中封装 API 调用
      • 3.2 组件中优雅调用
    • 四、实战任务:集成 RESTful API
      • 4.1 接口模拟(使用 Mock.js)
      • 4.2 完整 CRUD 实现流程图
    • 总结与思考

前言

数据交互是前后端分离开发的核心环节,Axios 作为 Vue 生态中最流行的 HTTP 客户端,能帮助我们高效管理异步请求。今天的重点是在 Vue 3 中集成 Axios,并结合 Pinia 状态管理实现数据流的闭环。

Vue3 官方中文文档传送点: 简介 | Vue.js

Vue3 的中文官方文档学习笔记很全还有练习场,推荐去官网学习

Vue前端成仙之路:Vue 前端成仙之路_野生的程序媛的博客-CSDN博客

GO后端成神之路:Go 后端成神之路_野生的程序媛的博客-CSDN博客


一、Axios 基础:从安装到实战

1.1 安装与全局配置

npm install axios

src/utils 目录下创建 request.js,配置全局实例:

import axios from 'axios'

// 创建 Axios 实例
const service = axios.create({
  baseURL: 'https://your-api-domain.com', // 接口基础路径
  timeout: 10000, // 超时时间
  headers: { 'Content-Type': 'application/json' } // 公共请求头
})

export default service

1.2 四大请求方法实战

GET 请求:获取任务列表
// 在组件中调用
import service from '@/utils/request'

const fetchTasks = async () => {
  try {
    const response = await service.get('/tasks')
    console.log(response.data)
  } catch (error) {
    console.error('请求失败:', error)
  }
}
POST 请求:新增任务
const addTask = async (taskData) => {
  await service.post('/tasks', taskData)
}
PUT & DELETE 请求:更新与删除
// 更新任务
const updateTask = async (id, newData) => {
  await service.put(`/tasks/${id}`, newData)
}

// 删除任务
const deleteTask = async (id) => {
  await service.delete(`/tasks/${id}`)
}

二、拦截器:打造智能请求管道

2.1 请求拦截器(统一添加 Token)

service.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => Promise.reject(error)
)

2.2 响应拦截器(统一错误处理)

service.interceptors.response.use(
  response => {
    // 处理标准响应结构
    if (response.data.code === 200) {
      return response.data
    } else {
      return Promise.reject(response.data.message)
    }
  },
  error => {
    // 处理 HTTP 状态码异常
    if (error.response.status === 401) {
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

三、Axios + Pinia 黄金组合

3.1 在 Store 中封装 API 调用

// stores/task.js
import { defineStore } from 'pinia'
import service from '@/utils/request'

export const useTaskStore = defineStore('task', {
  actions: {
    async fetchTasks() {
      try {
        const res = await service.get('/tasks')
        this.tasks = res.data
      } catch (error) {
        console.error('加载任务失败:', error)
      }
    },
    async addTask(task) {
      await service.post('/tasks', task)
      this.fetchTasks() // 自动刷新列表
    }
  }
})

3.2 组件中优雅调用

<script setup>
import { useTaskStore } from '@/stores/task'

const taskStore = useTaskStore()

// 初始化加载数据
onMounted(() => {
  taskStore.fetchTasks()
})

// 提交新任务
const handleSubmit = async () => {
  await taskStore.addTask(newTask.value)
}
</script>

四、实战任务:集成 RESTful API

4.1 接口模拟(使用 Mock.js)

// mock/task.js
import Mock from 'mockjs'

Mock.mock('/tasks', 'get', {
  'code': 200,
  'data|5-10': [{
    'id|+1': 1,
    'title': '@ctitle',
    'completed': '@boolean'
  }]
})

4.2 完整 CRUD 实现流程图

组件触发Action
Pinia调用Axios
请求成功?
更新Store状态
全局错误处理
视图自动更新

总结与思考

  1. 分层架构思维:将请求逻辑封装在 Store 层,保持组件专注 UI 交互
  2. 错误处理标准化:通过拦截器实现统一的异常处理流程
  3. 性能优化方向
    • 添加请求取消功能(避免重复请求)
    • 实现接口级缓存(减少重复请求)

明日预告:Day8 将引入 Element Plus,为我们的任务管理系统打造专业级 UI 界面!

相关文章:

  • Unity辅助工具_头部与svn
  • DeepIn Wps 字体缺失问题
  • 安全焊接,智慧监管
  • EG82088串口边缘计算网关
  • 网络空间安全(24)APT攻击
  • 北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构
  • 《无线网络架构与人工智能实时性:深度融合与未来展望》
  • 电商数据分析 电商平台销售数据分析 电商平台数据库设计 揭秘电商怎么做数据分析
  • 插入排序算法优化
  • Yolo-Uniow开集目标检测本地复现
  • Kotlin学习笔记之类与对象
  • 【ISP】ISP的pipeline的几种关键算法
  • mysql忘记root密码
  • 企业安全—对数据和资产进行识别和分类
  • 数据结构与算法效率分析:时间复杂度与空间复杂度详解(C语言)
  • 【赵渝强老师】PostgreSQL的模板数据库
  • 【C#学习笔记03】进制转换与反码、补码、原码
  • 数字人源头技术saas厂家开发
  • 木马查杀之AST初识篇
  • UE5.5 Niagara发射器更新属性
  • 俄土外长通话讨论俄乌谈判问题
  • 撤制镇如何突破困境?欢迎订阅《澎湃城市报告》第23期
  • “电竞+文旅”释放价值,王者全国大赛带火赛地五一游
  • 中美经贸高层会谈11日在日内瓦将继续进行
  • 经济日报金观平:充分发挥超大规模市场优势
  • 让“五颜六色”面孔讲述上海故事,2025年上海城市推荐官开启选拔