IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> reactjs+redux/react-redux+redux-thunk+mongoose的架构系列之axios封装及使用方法(七) -> 正文阅读

[JavaScript知识库]reactjs+redux/react-redux+redux-thunk+mongoose的架构系列之axios封装及使用方法(七)

在开始这一篇文章之前,本想一次性接着上一篇把redux的中间件redux-saga也总结成成文,但是想想redux-thunk了解了后也能解决项目中的异步请求操作的问题了!决定还是放在本系列文章的最后补充点去记录。

现在我们开始封装react中的axios封装及使用

安装

yarn add axios

src目录下新建utils文件夹

request.js

import axios from "axios";
import { Toast } from "antd-mobile";

const config = {
  baseURL: "http://localhost:3000", // 默认域名,不是接口的域名,是网站的域名
  timeout: 5000, // 响应时间
};
const instance = axios.create(config);

// 配置请求头
instance.defaults.headers["Content-Type"] = "application/json";

//请求拦截器
instance.interceptors.request.use(
  (config) => {
    Toast.loading("拼命加载中..."); //显示加载动画
    config.headers.Authorization = "";
    return config;
  },
  (error) => {
    Toast.hide(); //关闭加载动画
    return Promise.reject(error);
  }
);

//响应拦截器
instance.interceptors.response.use(
  (response) => {
    Toast.hide(); //关闭加载动画
    if (response.data.res_code === "401") {
      // 登录失效
      localStorage.clear(); // 清除缓存
      Toast.fail("您的登录已经失效,请重新登录", 2);
    }
    return response;
  },
  (error) => {
    Toast.hide(); //关闭加载动画
    return Promise.resolve(error.response);
  }
);

// 处理请求返回的数据
function checkStatus(response) {
  return new Promise((resolve, reject) => {
    if (
      response &&
      (response.status === 200 ||
        response.status === 304 ||
        response.status === 400)
    ) {
      resolve(response.data);
    } else {
      Toast.fail("网络异常,请检查网络连接是否正常!", 2);
    }
  });
}

export default {
  post(url, params = {}) {
    return instance({
      method: "post",
      url,
      data: params,
    }).then((response) => {
      return checkStatus(response);
    });
  },
  get(url, params = {}) {
    return instance({
      method: "get",
      url,
      params,
    }).then((response) => {
      return checkStatus(response);
    });
  },
};

引入到入口文件index.js

...
import instance from "./utils/request";
...

此时如果开启了eslint验证的话,会报错
在这里插入图片描述
不要慌,先百度一番,发现很多方法都不适用,只得自己思考解决方法!既然是验证,咱们关闭验证即可

package.json

"eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ],
    "rules":{
      "import/no-anonymous-default-export":0
    }
  }

重启文件,就正常了!

正常的思路,是哪个哪个组件需要发送接口请求,就在哪个文件import instance from ‘…’,这样是可以,但是我嫌太麻烦,要想出一个偷懒的方法,那我们在index.js添加如下代码

global.instance = instance;

作为全局变量来使用。
然后再我们的system.redux.js中创建一个方法

export const USER_DATA = "user_data";

...
case USER_DATA:
      return { ...state, ...action.data };
...

export function getUserData() {
  return (dispatch) => {
  //发送异步请求
    global.instance.get("/data").then((res) => {
      console.log(res, "请求数据...");
      if (res.code === 0) {
        dispatch(userData(res.doc));
      }
    });
  };
}
export function userData(data) {
  return {
    type: USER_DATA,
    data,
  };
}

最终

运行项目,查看redux.devtool

在这里插入图片描述
这样我们请求的数据就存放到redux中了。这种全局变量的房有什么问题,大家可以留言交流下~~

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:38:44  更:2021-08-16 11:40:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 16:38:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计