当前位置:首页 > React

react如何封装axios

2026-01-23 20:12:19React

封装 Axios 在 React 中的实现方法

在 React 项目中封装 Axios 可以提高代码复用性、统一错误处理和请求配置。以下是常见的封装方法:

react如何封装axios

创建 Axios 实例

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

添加请求拦截器

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

添加响应拦截器

instance.interceptors.response.use(
  response => {
    return response.data;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          console.error('未授权');
          break;
        case 404:
          console.error('资源不存在');
          break;
        default:
          console.error('服务器错误');
      }
    }
    return Promise.reject(error);
  }
);

封装常用请求方法

export const http = {
  get: (url, params) => instance.get(url, { params }),
  post: (url, data) => instance.post(url, data),
  put: (url, data) => instance.put(url, data),
  delete: url => instance.delete(url)
};

在组件中使用封装后的方法

import { http } from './api';

// 获取数据
const fetchData = async () => {
  try {
    const response = await http.get('/users');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
};

// 提交数据
const submitData = async data => {
  try {
    const response = await http.post('/users', data);
    console.log(response);
  } catch (error) {
    console.error(error);
  }
};

封装为自定义 Hook

import { useState } from 'react';
import { http } from './api';

export const useHttp = () => {
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);

  const request = async (method, url, data = null) => {
    setLoading(true);
    try {
      const response = await http[method](url, data);
      setLoading(false);
      return response;
    } catch (err) {
      setError(err);
      setLoading(false);
      throw err;
    }
  };

  return { loading, error, request };
};

使用自定义 Hook

const { loading, error, request } = useHttp();

const fetchUsers = async () => {
  const users = await request('get', '/users');
  console.log(users);
};

const createUser = async userData => {
  const newUser = await request('post', '/users', userData);
  console.log(newUser);
};

封装注意事项

  1. 统一错误处理逻辑,避免在每个请求中重复处理
  2. 添加 loading 状态管理,便于 UI 显示加载状态
  3. 考虑添加请求取消功能,防止组件卸载后继续执行请求
  4. 对敏感信息进行适当处理,如 token 刷新机制
  5. 添加类型定义(TypeScript)提高代码可维护性

标签: reactaxios
分享给朋友:

相关文章

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

react 如何运行

react 如何运行

运行 React 项目的步骤 安装 Node.js 确保系统已安装 Node.js(建议版本 16+),可通过官网下载并安装。安装后验证版本: node -v npm -v 创建 React 项目…

react如何注销

react如何注销

React 组件的注销方法 在 React 中,组件的注销通常指的是在组件卸载时执行清理操作,例如取消订阅、清除定时器或释放资源。以下是几种常见的方法: 使用 useEffect 钩子的清理函数…

uniapp安装axios

uniapp安装axios

安装axios 在uniapp项目中安装axios需要确保项目支持node_modules管理。通过npm或yarn安装axios: npm install axios # 或 yarn add a…

react native如何

react native如何

React Native 基础知识 React Native 是一个由 Facebook 开发的框架,用于使用 JavaScript 和 React 构建跨平台移动应用。它允许开发者编写一次代码,同时…

react如何减少伤病

react如何减少伤病

减少React应用中的性能问题(避免"伤病") 优化React应用性能需要从组件渲染、状态管理和外部依赖等多方面入手。以下是关键优化策略: 使用React.memo进行组件记忆 对函数组件使用Rea…