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

useMutation钩子的update函数获取mutation结果为undefined如何解决

问题原因及修正方案

你的代码存在3处核心错误,按优先级排序如下:

  • 变量名覆盖冲突
    你调用useMutation返回的突变函数被命名为addTodo,后续又自定义了同名的封装函数const addTodo = (text: string) => {},作用域内的重名变量会覆盖原突变函数,甚至会出现自定义函数递归调用自身的死循环问题,导致逻辑执行异常。
  • 入参变量名不匹配
    你定义的ADD_TODO mutation声明的入参变量为$text,但实际调用时传入的variables对象key为type,和约定的入参名不匹配,会导致服务端无法正确接收参数,返回空结果。
  • 点击事件语法错误
    按钮onClick回调里的addTodo('Placeholder') : undefined属于语法错误,可选链的fallback语法应为?而非:。

修正后的完整代码

// 按钮部分
<button
  onClick={() => {
    addTodo?.('Placeholder')
  }}
></button>

// mutation逻辑部分
const ADD_TODO = gql`
  mutation AddTodo($text: String!) {
      addTodo(text: $text) {
         id
         text
   }
}
`;

// 重命名useMutation返回的函数避免重名
const [mutateAddTodo] = useMutation(ADD_TODO, {
     update(cache, { data }) {
        // 先打印完整data确认结构,避免字段名拼写错误
        console.log('完整返回结果', data);
        console.log('MUTATION DATA IS ', data?.addTodo);
      }
});

const addTodo = (text: string) => {
  // 修正variables的key为text,和mutation定义匹配
  mutateAddTodo({ variables: { text: text } });
}

额外排查建议

如果修正后仍有问题,先打开Network面板查看GraphQL请求的实际响应体,确认返回的data下的根字段是否确实为addTodo,有无大小写、拼写偏差。


内容的提问来源于stack exchange,提问作者K.Shikha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:39:04