老师您好,请帮忙看看我使用createAsyncThunk引起页面出错的问题

来源:12-9 【redux连接】完成在线支付

Vangz

2021-08-18

我模仿电商网站的这个功能写了一个差不多的slice图片描述
以下是我模仿该功能的代码
图片描述
图片描述
图片描述
但是如果刷新页面就会产生错误,错误相关日志在下面
图片描述
如果将页面useEffect中的dispatch先注释掉等待页面渲染完成后再重新修改代码就可以正常获取数据
图片描述
图片描述
进步一排查发现问题所在
图片描述
因为我封装了一下axios 在拦截器里面使用了store 错误是从这两句里面出来的 但是如果我想要封装axios该如何解决类似的问题呢

写回答

1回答

阿莱克斯刘

2021-08-19

关于你的情况我有两个猜测:

第一种可能性是由于你的axios拦截器没有参与app的初始化生命周期所导致的。我觉得你可以尝试一下把axios拦截器放在app组件的componentDidMount (或useEffect hook)中,在通过组件生命周期来dispatch auth clearToken 这个action。如果上面的方案成功,那么你也可以再次重构,把axios拦截器从app组件中剥离出来,放在provider里面。

第二种可能性是页面在初始化的时候分两个步骤,第一步是获得bear token,而第二步的dispatch(getMonment())则是建立在获得bear token的基础上。所以你也可以试试在有且仅当token存在的时候才执行dispatch(getMonment())。

你先试试,不成功的话我们再继续研究

1
1
Vangz
感谢老师 成功用方案一解决问题 将axios的拦截器放到APP的hooks中不再报错
2021-08-19
共1条回复

React18 系统精讲 结合TS打造旅游电商平台

React18 精讲 + 结合 TS 实战 + 热门业务开发,获取必备技能

1993 学习 · 1015 问题

查看课程