关于使用context 来做全局ajax loading 的问题

来源:1-1 课程导学

媳妇的号我来学

2021-11-12

老师您好,想使用axios的intercept拦截器来实现全局的请求loading效果,
1、我创建了一个loadingContext 提供出isLoading 和 setLoading()
2、 在index.tsx使用这个loadingContext 来包裹整个APP
3、在App.tsx 中使用antd的组件 Spin 包裹所有的子节点 并 引入 loadingContext 中的isLoading 变量进行控制
4、当有请求时 在 axios.intercept.request.use((config=>{
const context = useContext(loadingContext);
context.setLoading(true);
}))

5、当响应时 在 axios.intercept.response.use((config=>{
const context = useContext(loadingContext);
context.setLoading(false);
}))

结果 :
图片描述

写回答

1回答

Nolan

2021-11-13

这个错误是在说,hook只能在组件或者其他hook中被调用。在你的代码里,axios.intercept.request.use(...), use里面是一个普通的回调函数,里面是不能调用useContext这种hook的。正确的做法是(没验证,给你提供个思路):

const App = () => {

const context = useContext(loadingContext);

useEffect(() => {

 axios.intercept.request.use((config=>{
 context.setLoading(true);
 }))

}, [])

}

0
0

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程