You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js中useMutation的onSuccess内useState不生效,如何获取data.id?

问题解决:React Query useMutation onSuccess中setState不生效

问题原因

你在onSuccess里调用setItem(data.id)后立刻执行了navigate,React的状态更新是异步的,组件在状态更新完成并重新渲染前就被路由跳转卸载了,所以页面根本没机会渲染更新后的item值。

解决方案

根据你的实际需求,分两种场景处理:

场景1:想在当前页面短暂显示上传后的ID

要么去掉navigate(如果不需要跳转),要么把navigate放到setItem的回调函数里,确保状态更新完成后再跳转:

setItem(data.id, () => {
  navigate(`/questions/${data.id}`);
});

更高效的方式是直接用React Query mutation返回的数据渲染,不用额外存到state:

// 直接在render中使用mutation的data
<Text>{uploadQustionMutation.data?.id}</Text>

React Query会自动缓存mutation的返回结果,通过uploadQustionMutation.data就能直接获取,避免额外维护state的麻烦。

场景2:想在跳转后的页面使用这个ID

你已经通过navigate(/questions/${data.id})把ID作为路由参数传递了,跳转后的页面直接用useParams获取即可:

// 跳转后的问题详情页组件
import { useParams } from "react-router-dom";

function QuestionDetail() {
  const { id } = useParams();
  return <Text>问题ID:{id}</Text>;
}

这是路由间传递数据的标准方式,比跨组件存state更可靠。


内容的提问来源于stack exchange,提问作者Hyeongwoo Jeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:50:39