【发布时间】:2020-04-07 16:43:39
【问题描述】:
我想添加一个加载器组件,以便在 React 中进行 API 调用时呈现。我想使用 react context + hooks 而不是 redux。
正如 react hooks 的规则所说,我们不应该在 react 组件之外使用 react hooks。但是我需要在 Axios 拦截器中发送SHOW_LOADER 和HIDE_LOADER,如下所示。
有没有办法做到这一点?
import axios from "axios";
axios.interceptors.request.use(
config => {
dispatch({
type: "SHOW_LOADER"
})
return config;
},
error => {
dispatch({
type: "HIDE_LOADER"
})
return Promise.reject(error);
}
);
axios.interceptors.response.use(
response => {
dispatch({
type: "HIDE_LOADER"
})
return response;
},
error => {
dispatch({
type: "HIDE_LOADER"
})
return Promise.reject(error);
}
);
function GlobalLoader(){
const [state,dispatch] = useContext(LoaderContext);
return(
<div>
{
state.loadStatus &&
<Loader
type = "Puff"
color = "#00BFFF"
height = {100}
width = {100}
timeout = {3000} />
}
</div>
);
}
export default GlobalLoader;
如果需要更多信息,请告诉我。:)
【问题讨论】:
-
为什么不将拦截器移动到
GlobalLoader中的useEffect内? -
useEffect在子组件中发起 API 请求时不会被执行。 -
useEffect不需要执行,您正在将一个函数传递给拦截器,它将执行 -
@Agney
axios.interceptor未检测到子组件中发出的 API 请求。
标签: reactjs axios react-hooks interceptor react-context