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

React useMutation传参异常:updatedBy变为undefined,pID正常

问题原因及解决方案

核心问题

React Query 的 useMutation 提供的回调函数仅支持接收单个参数。你调用 applyPolicies(policyId, updatedBy) 时传入了两个参数,但 useMutation 只会把第一个参数(policyId)传递给回调,第二个参数 updatedBy 自然会变成 undefined。

修复方案

把需要传递的多个参数包装成一个对象或数组,让 useMutation 的回调能一次性接收所有数据:

方案1:使用对象传递参数(推荐,可读性更高)

修改调用处和 mutation 函数:

// onCellClick 调用时传对象
const onCellClick = p => {
  const policyId = p?.id;
  const updatedBy = p?.row?.updated_by;
  console.log(updatedBy, "updatedBy");
  applyPolicies({ policyId, updatedBy }); // 包装成对象
};

// useApplyPolicyMutation 里接收对象参数
export const useApplyPolicyMutation = () => {
  return useMutation(
    ({ policyId, updatedBy }) => { // 解构对象获取参数
      console.log(updatedBy, "updatedByinquery");
      console.log(policyId, "pID");
      const workspaceId = getWS();
      const payload = {
        workspace_id: workspaceId,
        policy_id: policyId,
        updated_by: updatedBy
      };
      customPost("/policymanagement/api/v1/auto-discover/add-policy", payload);
    }
  );
};

方案2:使用数组传递参数

// onCellClick 调用时传数组
const onCellClick = p => {
  const policyId = p?.id;
  const updatedBy = p?.row?.updated_by;
  console.log(updatedBy, "updatedBy");
  applyPolicies([policyId, updatedBy]); // 包装成数组
};

// useApplyPolicyMutation 里接收数组参数
export const useApplyPolicyMutation = () => {
  return useMutation(
    ([pID, updatedBy]) => { // 解构数组获取参数
      console.log(updatedBy, "updatedByinquery");
      console.log(pID, "pID");
      const workspaceId = getWS();
      const payload = {
        workspace_id: workspaceId,
        policy_id: pID,
        updated_by: updatedBy
      };
      customPost("/policymanagement/api/v1/auto-discover/add-policy", payload);
    }
  );
};

补充说明

useMutation 的设计逻辑是让你把所有需要的参数合并成一个单一值传递,这样也能保证参数结构的清晰,避免出现多参数传递时的歧义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:24