React axios拦截器中定义的displaySucces函数未触发怎么解决?
问题原因分析
- 代码存在基础语法错误:两个action导入语句末尾都缺失闭合的单引号,会导致模块导入失败,
displaySucces可能实际为undefined,调用自然无效果。另外要注意拼写问题,succes是常见拼写错误(正确拼写为success),如果你的action文件里导出的是正确拼写的displaySuccess,也会导致导入的变量为undefined。 - 核心逻辑错误:Redux的action creator被直接调用,没有通过
dispatch触发。你直接调用displaySucces(response.status)只会返回一个action对象,并没有提交给Redux reducer处理,自然不会触发状态更新和toast展示。 - 额外排查点:可以先在成功回调里加
console.log(response)确认响应成功时该回调是否正常执行,排除其他拦截器提前返回、请求本身走了错误回调的情况。
修复方案
- 修复导入语法和拼写问题,同时引入项目根store实例:
import AuthentificationService from "./AuthentificationService"; // 补全闭合引号,同时检查拼写是否匹配action文件的导出 import { displayError } from '../store/actions/errorActions' // 注意确认success拼写是否和导出一致,这里如果原导出是succes就保留,否则修正为displaySuccess import { displaySucces } from '../store/actions/succesActions' // 引入你的项目根store实例,路径根据你项目实际存储位置调整 import store from '../store'
- 调用action时必须通过store的dispatch方法提交:
api.interceptors.response.use(function (response) { // 通过dispatch提交action store.dispatch(displaySucces(response.status)) return Promise.resolve(response) }, function (error) { // 错误提示同理也要用dispatch提交 store.dispatch(displayError(error.response.status)) return Promise.reject(error) })
- 可选校验:如果你的
displaySucces逻辑里有状态码过滤规则,比如只对200状态码展示提示,可以先在回调里打印状态码确认匹配逻辑,避免被规则过滤导致无提示。
内容的提问来源于stack exchange,提问作者songa
相关产品推荐
相关产品推荐

