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

React应用中SWR Mutation报错‘Can’t trigger the mutation: missing key’求助

useSWRMutation 触发报错:Can’t trigger the mutation: missing key 解决方法

错误原因

useSWRMutation要求必须提供一个非空的mutation key作为第一个参数,这个key是SWR用来追踪mutation状态、区分不同mutation实例的唯一标识。你的代码中传入了null作为初始key,导致SWR无法识别对应的mutation,触发时抛出missing key错误。

修复方案

方案1:使用固定mutation key

修改useCustomSWRMutation,将初始key替换为一个固定字符串:

import useSWRMutation from "swr/mutation";

const sendRequest = async (url, { arg, method, headers }) => {
  const options = {
    method: method || "POST",
    headers: {
      "Content-Type": "application/json",
      ...headers,
    },
    body: JSON.stringify(arg),
  };

  const response = await fetch(url, options);
  if (!response.ok) {
    const errorData = await response.json();
    throw new Error(errorData.message || "Something went wrong");
  }

  return await response.json();
};

const useCustomSWRMutation = () => {
  // 将null替换为固定的mutation key
  const { trigger, data, error, isMutating } = useSWRMutation(
    'generic-mutation',
    sendRequest
  );

  return { triggerMutation: trigger, data, error, isMutating };
};

export default useCustomSWRMutation;

方案2:支持自定义mutation key(推荐)

如果应用中有多个不同的mutation操作,可以让useCustomSWRMutation接收自定义key,方便区分不同的mutation状态:

import useSWRMutation from "swr/mutation";

const sendRequest = async (url, { arg, method, headers }) => {
  const options = {
    method: method || "POST",
    headers: {
      "Content-Type": "application/json",
      ...headers,
    },
    body: JSON.stringify(arg),
  };

  const response = await fetch(url, options);
  if (!response.ok) {
    const errorData = await response.json();
    throw new Error(errorData.message || "Something went wrong");
  }

  return await response.json();
};

// 接收可选的自定义key参数,默认值为'generic-mutation'
const useCustomSWRMutation = (key = 'generic-mutation') => {
  const { trigger, data, error, isMutating } = useSWRMutation(
    key,
    sendRequest
  );

  return { triggerMutation: trigger, data, error, isMutating };
};

export default useCustomSWRMutation;

使用时可指定专属key:

// 针对场地操作的mutation使用专属key
const { triggerMutation, data, error, isMutating } = useCustomSWRMutation('venue-mutation');

额外说明

你的sendRequest函数参数处理是正确的:调用triggerMutation(url, { arg: venue, method, headers })时,url会作为mutation key传递给sendRequest的第一个参数,后续可正常用于请求地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:19:53