javascript - 在 react 中使用 axios 拦截器的问题

标签 javascript reactjs axios xmlhttprequest interceptor

我想在使用 axios 发出和发送请求时获得获取状态。我认为我可以通过使用 axios 拦截器 来实现这一点。我试试这段代码:

./axiosInstance.js

let fetching = false;

const axiosInstance = axios.create();

axiosInstance.interceptors.request.use(config => { 
    fetching = true;
    console.log("first log: ", fetching);
    return config;
}, () => { fetching = false });

axiosInstance.interceptors.response.use(() => { 
    console.log("second log: ", fetching);
    fetching = false;
    console.log("third log: ", fetching);
});

export { fetching, axiosInstance };

这就是我使用自己创建的 axios 实例发出和发送请求的方式:

./component.js

import { fetching, axiosInstance } from "./axiosInstance";

const Component = () => {

    const sendRequest = () => {
        axiosInstance.get("someUrl:somePort/");
    };

    return (
        <>
            <button type="button" onClick={ sendRequest }>click</button>
            <p>{ fetching ? "true": "false" }</p>
        </>
    );
}

export default Component;

但问题是,这是行不通的。我按预期在 ./axiosInstance.js 中获取日志:

first log: true
second log: true
third log: false

但我在 ./component.js 中有一个

标记,我用它来显示 fetching 变量的值我从 ./axiosInstance.js 获取它。并且它的值永远不会更改为 true,它始终为 false。

<p>{ fetching ? "true": "false" }</p>

最佳答案

import {useState} from 'react';

const [fetching, setFetching] = useState(false);

const axiosInstance = axios.create();

axiosInstance.interceptors.request.use(config => { 
    setFetching(true);
    console.log("first log: ", fetching);
    return config;
}, () => { fetching = false });

axiosInstance.interceptors.response.use(() => { 
    console.log("second log: ", fetching);
    setFetching(false);
    console.log("third log: ", fetching);
});

export { fetching, axiosInstance };

您可以使用fetching 作为状态。 它会起作用。

关于javascript - 在 react 中使用 axios 拦截器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66999220/

相关文章:

javascript - 尝试从客户端的 Medium API 访问公共(public)故事时出错

javascript - axios 库中的超时功能不起作用

javascript - 如果 Chrome 和 Safari 都使用 Webkit,我是否还需要在它们中测试渲染?

javascript - 如何编写以任意顺序匹配两个或多个字符的正则表达式?

javascript - 试图让音频先开始播放

javascript - 动态插入的 React 组件

reactjs - onBlur 从子元素调用

javascript - 使用 pm2 查看当前目录外的文件

javascript - 如何在 react-datepicker 中实现验证/限制

javascript - 通过 Flask API 发送 json 不会接受我的论点