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

Apollo useMutation无法传递变量问题排查求助

问题解决:Apollo useMutation 变量传递错误

核心错误点

  • handleSubmit未声明为async:使用await调用异步函数createUser,但函数本身未标记async,这会触发语法错误,同时干扰TypeScript的类型推断逻辑。
  • 未指定useMutation泛型类型:TypeScript无法自动推导mutation的变量和返回数据类型,导致变量参数与预期类型不匹配,抛出类型错误。

修正后的代码

import { useMutation, gql } from '@apollo/client';
import { FormEvent } from 'react';

// 定义mutation返回数据的类型
type CreateUserResponse = {
  createUserByEmail: {
    age: number;
  };
};

// 定义mutation接收的变量类型
type CreateUserVariables = {
  hoge: string;
};

const CREATE_USER = gql(/* GraphQL */ `
    mutation createUserByEmail($hoge: String!) {
        createUserByEmail(input: $hoge) {
            age
        }
    }
`);

// 给useMutation指定泛型,明确返回数据和变量类型
const [createUser, { loading, error, data }] = useMutation<CreateUserResponse, CreateUserVariables>(CREATE_USER);

// 标记函数为async,支持await语法
const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {
  e.preventDefault(); // 阻止表单默认提交行为,避免页面刷新
  try {
    const response = await createUser({ variables: { hoge: 'hoge' } });
    console.log('用户创建成功:', response);
  } catch (err) {
    console.error('用户创建失败:', err);
  }
};

额外注意事项

  • 若你的GraphQL Schema中createUserByEmail的input参数要求是对象结构(比如input: { email: String! }),需同步调整变量的结构,确保与Schema定义完全一致。
  • 显式定义泛型类型后,TypeScript会自动校验变量和返回数据的结构,提前发现类型不匹配问题。

内容的提问来源于stack exchange,提问作者Kazuya Tomita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:07:09