在Vue 3中,封装一个网络请求工具,可以提高代码的复用性和可维护性。在实际开发中,我们经常需要发送网络请求来获取数据,处理数据并展示到界面上。因此,封装一个通用的请求库是非常有必要的。我们可以使用 axios 库来发送请求,并结合 Vue 3 的组合式 API 来实现封装。

1. 安装 Axios

首先,我们需要安装 axios。可以通过 npm 或 yarn 来完成这个步骤:

npm install axios

或者:

yarn add axios

2. 创建请求工具

在项目的 src 目录下,我们可以创建一个名为 request.js 的文件,用于封装请求逻辑。示例代码如下:

// src/request.js
import axios from 'axios';

// 创建一个 axios 实例
const instance = axios.create({
    baseURL: 'https://api.example.com', // 设置基础 URL
    timeout: 10000, // 请求超时设置
});

// 请求拦截器
instance.interceptors.request.use(config => {
    // 在发送请求之前做些什么,比如添加 token
    const token = localStorage.getItem('token'); // 假设 token 存储在 localStorage 中
    if (token) {
        config.headers['Authorization'] = `Bearer ${token}`; // 这里设置请求头
    }
    return config;
}, error => {
    return Promise.reject(error);
});

// 响应拦截器
instance.interceptors.response.use(response => {
    // 对响应数据做点什么
    return response.data; // 直接返回数据部分
}, error => {
    // 对响应错误做点什么
    console.error('请求错误:', error);
    return Promise.reject(error);
});

// 封装请求方法
export const get = (url, params = {}) => {
    return instance.get(url, { params });
};

export const post = (url, data = {}) => {
    return instance.post(url, data);
};

// 其他请求方法,如 PUT、DELETE 可以类似封装

3. 使用封装的请求工具

接下来,我们可以在 Vue 组件中使用封装好的请求工具。以下是一个示例组件:

<template>
    <div>
        <h1>用户列表</h1>
        <ul>
            <li v-for="user in users" :key="user.id">{{ user.name }}</li>
        </ul>
    </div>
</template>

<script>
import { reactive, onMounted } from 'vue';
import { get } from '@/request';

export default {
    setup() {
        const state = reactive({
            users: [],
        });

        const fetchUsers = async () => {
            try {
                const data = await get('/users'); // 请求用户列表
                state.users = data; // 更新状态
            } catch (error) {
                console.error('获取用户失败:', error);
            }
        };

        onMounted(() => {
            fetchUsers(); // 组件挂载时请求用户数据
        });

        return state;
    },
};
</script>

<style scoped>
/* 添加样式 */
</style>

4. 错误处理与 Loading 状态

在实际开发中,我们通常还需要处理请求失败的情况,显示加载状态等。可以在组件中使用 refwatch 来处理这些情况。

import { ref } from 'vue';

export default {
    setup() {
        const users = ref([]);
        const loading = ref(false);
        const error = ref(null);

        const fetchUsers = async () => {
            loading.value = true; // 设置加载状态
            error.value = null; // 清空错误信息
            try {
                users.value = await get('/users');
            } catch (err) {
                error.value = '获取用户失败';
                console.error(err);
            } finally {
                loading.value = false; // 清除加载状态
            }
        };

        // ... 其他代码同上
    },
};

总结

通过以上步骤,我们成功地封装了一个简单而实用的请求工具,并在 Vue 3 组件中使用了它。这样不仅提高了代码的可读性和可维护性,还能够帮助我们更高效地处理网络请求及其状态。在实际开发中,可能还需要根据项目的需求进一步扩展这个请求库,比如添加更多的请求处理逻辑、全局的错误处理等。希望这个简单的示例能够帮助你更好地理解如何在 Vue 3 中进行请求封装。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部