axios拦截器+React JS

axios拦截器+react js

在本文中,我们将讨论如何在 react 中使用 axios 创建安全高效的 api 客户端。我们将使用 apiclient 类介绍 axios 设置、拦截器、错误处理配置和 crud 方法。让我们分解一下这个脚本的工作原理以及它提供的功能。

1。 axios 基本配置

import axios from "axios";import securelocalstorage from "react-secure-storage";axios.defaults.baseurl = "";axios.defaults.headers.post["content-type"] = "application/json";

这个初始 axios 设置定义了 baseurl 并为所有 post 请求设置了 content-type。通过配置基本 url,axios 会自动将此基本 url 附加到每个请求,从而更轻松地在 api 调用中使用端点。

2。使用拦截器进行响应和错误处理

拦截器是强大的工具,使我们能够全局处理响应和错误。

处理响应

axios.interceptors.response.use(    function (response) {        return response.data ? response.data : response;    },    // ...## handling errors);

此响应拦截器检查响应中是否有数据。如果存在,则仅返回数据。这样,我们只在组件中获取我们需要的相关数据,而无需重复访问response.data。

处理错误

function (error) {    if (error?.response?.status === 401 && error?.response?.data?.data === 'token is not valid'){        securelocalstorage.clear()        window.location.href = '/'    } else {        let message;        switch (error?.response?.status) {            case 500:                message = error?.response;                break;            case 401:                message = error?.response;                break;            case 404:            case 400:            case 409:                message = error?.response?.data;                break;            default:                message = error.message || error;        }        return promise.reject(message);    }}

在本节中,如果响应状态为 401 并且令牌无效,应用程序会从安全本地存储中清除令牌并将用户重定向到登录页面。这可确保用户在身份验证会话过期时自动注销。对于其他状态代码,它会捕获错误并根据错误类型返回适当的消息。

3。 setauthorization函数

const setauthorization = (token) => {    axios.defaults.headers.common["token"] = token;};

此函数允许应用程序动态地为每个请求添加身份验证令牌。登录后调用setauthorization(token),token会自动添加到请求头中。

4。为 crud 方法创建 apiclient 类
apiclient 类提供了 http 请求的标准方法,包括 get、create、update、put 和 delete。

获取方法
此方法很灵活,可以处理对象或字符串格式的参数。

get = (url, params) => {    let response;    let paramkeys = [];    if (params && typeof (params) === 'object') {        object.keys(params).map(key => {            if (key === 'pagination') {                paramkeys.push("pageindex=" + string(params[key]?.pageindex || 1));                paramkeys.push("pagesize=" + string(params[key]?.pagesize || 10));            } else {                paramkeys.push(key + '=' + params[key]);            }        });        const querystring = paramkeys.length ? paramkeys.join('&') : "";        response = axios.get(`${url}?${querystring}`, params);    } else if (typeof (params) === 'string') {        response = axios.get(`${url}/${params}`);    } else {        response = axios.get(url, params);    }    return response;};

此方法会自动格式化查询字符串,从而更轻松地创建具有复杂参数(如分页、过滤器或排序)的 get 请求。

创建、更新、放置和删除方法
这些方法使用axios内置的post、patch、put和delete函数与api交互。

create = (url, data) => {    return axios.post(url, data);};update = (url, data) => {    return axios.patch(url, data);};put = (url, data) => {    return axios.put(url, data);};delete = (url, config) => {    return axios.delete(url, { ...config });};

该类抽象了api调用,使得组件中的代码更加干净、结构化,减少了冗余。

api 客户端使用示例

import { API_URL, API_VERSION } from "#/Common/constants/env";import { APIClient } from "#/helpers/api_helper";export const POST_LOGIN = API_URL + API_VERSION +  "/auth/login";const api = new APIClient();export const Login = (data: any) => api.create(POST_LOGIN, data);

对于完整的脚本,您可以查看以下要点
axios 拦截器

以上就是axios拦截器+React JS的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1497053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 19:09:00
下一篇 2025年12月10日 11:27:25

相关推荐

  • Commander Redux 的剧集防御策略

    第 4 集:commander redux 的防御策略 太阳刚刚在法典星球升起,但流之堡垒外的庭院已经热闹非凡。阿琳立正站着,等待着下一节课。今天,她将在redux指挥官的指导下接受训练,他是行星防御军团(pdc)中最有纪律和战术头脑的人之一。堡垒在她上方若隐若现,其建筑错综复杂,充满了复杂的符号和…

    2025年12月19日
    000
  • useContext:React Hooks

    react 中的 usecontext 和两个实用的迷你项目 介绍 在 react 中,管理组件之间的数据至关重要,尤其是在多个组件需要访问相同数据的大型应用程序中。 prop 钻取(将 props 传递到组件树的多个级别)很快就会变得很麻烦。这就是 react 的 usecontext hook …

    2025年12月19日
    000
  • 章节《钩子圣人和敏捷的礼物》

    第三集:钩子圣人和敏捷的礼物 太阳在法典星球上空升起,地表沐浴在反应元素能量的光芒中。阿林站在那座高大雄伟的建筑前,这座建筑被称为胡克斯实验室——这里是锻造和完善敏捷性和反应能力的最佳工具的地方。今天,她准备去见钩圣。 “准备好了吗,学员?” stateflow 中尉问道,并向 arin 点了点头表…

    2025年12月19日
    000
  • useReducer:React Hooks

    react 中的 usereducer:通过两个迷你项目简化状态管理 介绍 状态管理是在 react 中构建动态和交互式应用程序的关键部分。虽然 usestate 足以管理简单状态,但随着应用程序的状态变得越来越复杂,usereducer 提供了一种更强大、可预测的方法来处理它。受 redux 的减…

    2025年12月19日
    000
  • 使用 Zod 和 Faker 构建用于生成模拟数据的 TypeScript 助手

    构建应用程序时,模拟数据对于测试、开发和原型设计非常宝贵。借助 zod 强大的模式验证和 faker 的数据生成功能,我们可以创建一个强大的助手来为任何 zod 模式生成真实的、符合模式的模拟数据。 介绍 在本指南中,我们将创建一个辅助函数generatemockdatafromschema,它接受…

    2025年12月19日
    000
  • 如何解决 Sublime Text 3 的 ESLint 插件配置问题?

    sublime text 3 的 eslint 插件配置 sublime text 3 的 eslint 插件在使用时可能会遇到各种错误。本文将介绍两种解决这些错误的配置方法。 方式一:修改 .eslintrc.json 配置 找到 .eslintrc.json 文件并对其进行编辑。对于你遇到的缩进…

    2025年12月19日
    000
  • 使用Sublime Text 3 ESLint 插件时如何解决报错?

    sublime text 3 插件 eslint 配置指南 在使用 sublime text 3 的 eslint 插件时,你可能遇到了各种报错,这可能会令人沮丧。本文旨在提供明确的步骤,帮助你配置插件并解决这些报错。 配置方式 方式一:修改 .eslintrc.json 找到项目目录中的 .esl…

    2025年12月19日
    000
  • 使用 Sublime Text 3 开发 Vue 项目时如何解决 ESLint 插件报错?

    sublime text 3 插件 eslint 报错解决 在使用 sublime text 3 开发 vue demo 时,你可能会遇到 eslint 插件带来的各种报错。这些报错可能会让人头疼,因此了解如何正确配置该插件至关重要。 解决报错方法: 方式 1:修改 eslint 配置 立即学习“前…

    2025年12月19日
    000
  • Sublime Text 3 中 ESLint 插件配置遇到困难怎么办?

    编辑器 sublime text 3 中 eslint 插件配置疑惑 sublime text 3 中的 eslint 插件在配置方面可能会遇到一些困难,这会影响在你使用 vue.js 开发时出现各种报错。如果你也遇到了同样的问题,本文将为你提供两种解决办法,希望能助你解除烦恼。 方式一:修改 es…

    2025年12月19日
    000
  • Sublime Text 3 中 ESLint 插件报错如何解决?

    sublime text 3 中 eslint 插件的报错处理 在使用 sublime text 3 编写 vue demo 时,许多用户遇到了由 eslint 插件引起的报错。这些报错五花八门,包括缩进、规则不一致等。本问答将指导你如何配置 eslint 插件以避免这些报错。 解决方法: 修改 e…

    2025年12月19日
    000
  • 使用 SCSS 和 Redux 在 React 中创建主题系统

    您是否曾经想开发一个具有多个主题的应用程序,但不知道如何去做?有很多方法 安装依赖项 让我们开始安装我们需要的一切。为此,我们需要 scss 和 redux: yarn add sassyarn add @reduxjs/toolkit 只需运行此脚本即可安装您需要的所有内容,并允许我们开始。 第 …

    2025年12月19日
    000
  • 聚集散点图

    使用 zingchart 可视化足球运动员的行走距离 在本教程中,我们将使用 zingchart 创建散点图,以可视化不同足球比赛中球员的移动距离。该图表显示了多场比赛的模拟数据,可以深入了解每分钟所经过的距离。 代码说明 此代码片段使用 javascript 生成八个游戏的虚假数据,然后使用 zi…

    2025年12月19日
    000
  • 令人震惊!这种跨组件技巧会让react-query用户大汗淋漓

    哇,我的前端开发者们!今天,我想与大家分享一个非常有用的功能 – 跨组件触发请求。您是否经常绞尽脑汁试图实现平滑的分页列表?别担心,我发现了一个超级方便的工具,它对我帮助很大!我兴奋得要跳起来! alovajs – 你听说过吗?它是下一代请求工具,而不仅仅是一个简单的 htt…

    2025年12月19日
    000
  • useReducer 以及它与 useState 的不同之处

    目录 简介何时使用 usestate何时使用 usereducer示例 1:带有 usestate 的计数器应用示例 2:使用 usereducer 的计数器应用示例 3:使用 usereducer 处理表单输入示例 4:使用 usereducer 构建测验应用程序usestate 和 usered…

    2025年12月19日 好文分享
    000
  • 使用 html css 和 javascript 制作太阳和月亮动画

    Day-Night Toggle body, html { margin: 0; padding: 0; height: 100vh; display: flex; justify-content: center; align-items: center; font-family: Arial, s…

    2025年12月19日 好文分享
    000
  • 如何使用 JavaScript 和 HTML 实现 JSON 数据的可折叠展开功能?

    要实现可折叠展开的 json 可视化功能,可以借助 javascript 和 html 来完成。具体实现步骤如下: 首先,创建一个用于显示 json 数据的 html 容器: 在模板中定义各种 json 类型值的 html 结构: : , : , : , : , : , : [ … ] , : …

    2025年12月19日
    000
  • 视频对讲画面延迟30秒,如何解决?

    视频对讲画面延迟 30 秒,优化方法解析 在使用 jssip 进行视频对讲时,对方视频画面出现 30 秒的延迟,这个问题困扰着许多开发者。针对这一问题,我们分析了代码配置和网络环境,锁定了问题的根源。 jssip 注册代码分析 如图所示,jssip 的注册代码中,sockets 数组用于配置 web…

    2025年12月19日
    000
  • 如何优化 JsSIP 视频对讲的延迟问题?

    优化视频对讲延迟 在使用 JsSIP 进行视频对讲时,可能会遇到对方视频画面延迟的问题。本文将探索如何优化视频画面显示时间,确保顺畅的视频通话体验。 JsSIP 是一款用于创建 WebRTC 应用程序的库。在您的代码示例中,您使用 JsSIP 提供的 Websocket 接口来建立到 FreeSWI…

    好文分享 2025年12月19日
    000
  • 如何写出js代码

    要编写 JavaScript 代码,首先需要文本编辑器或 IDE,推荐 Notepad++、Atom 和 Visual Studio Code。JavaScript 遵循 C 语言风格的语法,使用花括号表示块,分号表示语句结束。变量用 var 声明,数据类型包括字符串、数字、布尔值、数组和对象。函数…

    2025年12月19日
    000
  • 从头开始设计虚拟 DOM:分步指南

    如果您听说过 react 或 vue 等前端库,您可能遇到过术语 虚拟 dom。虚拟 dom 是一个聪明的概念,它可以通过提高 dom 更新效率来帮助加快 web 开发速度。 在本指南中,我们将详细介绍如何使用通用的类似代码的步骤从头开始实现简单的虚拟 dom。 什么是虚拟 dom? 虚拟 dom …

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信