RTK Query中onSuccess与onError回调未触发问题求助
登录Mutation的onSuccess/onError回调未触发排查
我实现了登录的Mutation逻辑,代码如下:
const [login] = useLoginMutation({ onSuccess: () => { console.log("Success"); setAlertType("success"); setAlertMessage("Login successful!"); setOpenAlert(true); }, onError: (error) => { console.log("Error: " + error); setAlertType("error"); setAlertMessage(`Login failed: ${error}`); setOpenAlert(true); } });
目前登录查询已成功执行,其余功能均正常,但onSuccess和onError回调始终未触发,请求协助排查原因。
排查方向:
- 检查
login()调用时是否覆盖了回调:如果调用Mutation时传入了onSuccess/onError参数(比如login({ variables: { ... }, onSuccess: () => {} })),会直接覆盖初始化钩子时设置的回调,导致原回调不执行。 - 验证GraphQL响应格式:打开浏览器DevTools的Network面板,查看登录请求的返回结构。Apollo Client要求成功响应必须包含
data字段,错误响应需包含errors数组;如果后端返回格式不符合规范,Apollo可能无法识别状态,不会触发对应回调。 - 排查全局错误拦截配置:若Apollo Client全局配置了
errorLink,检查拦截逻辑是否吞掉了错误,导致组件级的onError无法触发。比如错误链接中是否正确调用了forward(operation)传递请求,没有错误时是否正确返回结果。 - 测试缓存策略影响:如果登录请求被缓存命中,Apollo可能直接返回缓存数据而跳过
onSuccess。可以临时给Mutation添加fetchPolicy: 'no-cache'参数测试:const [login] = useLoginMutation({ fetchPolicy: 'no-cache', // 原回调配置... }); - 确认Codegen生成的Hook正确性:如果
useLoginMutation是通过GraphQL Codegen生成的,检查生成的代码中是否正确处理了回调参数,有没有遗漏回调触发的逻辑。 - 检查组件生命周期:如果Mutation请求过程中组件被卸载,回调自然无法执行。可以在组件的
useEffect中添加卸载日志,验证组件是否在请求完成前被销毁。
内容的提问来源于stack exchange,提问作者Ephraim Becker
相关产品推荐
相关产品推荐

