提问人:jjyj 提问时间:11/16/2023 最后编辑:jjyj 更新时间:11/16/2023 访问量:53
使用 redux-toolkit 在 axios 拦截器中调度
dispatch in axios interceptor with redux-toolkit
问:
我正在尝试在 axios 响应拦截器中调度 redux 工具包操作。
我看到一些其他问题建议人们使用store.dispatch(somefunction())
在 redux 工具包中,您通常会调用钩子来调度操作,但由于它是一个钩子,因此我无法在我的非组件 axios 拦截函数中调用它。useDispatch()
myaxios.js
import axios from 'axios'
const BASE_URL = 'http://localhost:8080'
export const myaxios = axios.create({
baseUrl: BASE_URL
})
axiosWithIntercept.js(缩写为问题范围):
import { myaxios } from './myaxios'
myaxios.interceptors.response.use(resp => resp, async (err) => {
if (err?.resp?.status === 401) {
// run my dispatch action here
}
})
export default myaxios
答:
0赞
Sahab
11/16/2023
#1
import { myaxios } from './myaxios';
export const myaxiosFunc = (dispatch,storeActions) => {
myaxios.interceptors.response.use(resp => resp, async (err) => {
if (err?.resp?.status === 401) {
// run my dispatch action here
dispatch(storeActions.yourMethodName());
}
})
}
export default myaxiosFunc;
评论
0赞
jjyj
11/16/2023
无法在此处使用,因为此文件/函数不是函数组件。理想情况下,我希望保持这种方式,我需要在其他非组件函数中使用,例如useDispatch()
myaxios
createAsyncThunk
0赞
Sahab
11/16/2023
@jjyj我已经更新了我的答案,您可以从函数组件传递 dispatch 和 storeActions。
2赞
Vivekajee
11/16/2023
#2
您也可以以这种方式使用。
import store from './path-to-your-redux-store'; // Update the path accordingly
.
.
.
myaxios.interceptors.response.use(resp => resp, async (err) => {
if (err?.response?.status === 401) {
// Dispatch your Redux action here
store.dispatch(yourReduxAction());
}
return Promise.reject(err);
});
评论
store.dispatch
useDispatch()
useEffect
useDispatch
useDispatch
useSelector
useDispatch
dispatch
store