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

react-admin中SaveButton使用transform prop报setTransform不是函数求解决方案

问题原因

react-admin v4及以上版本中,transform属性本身是SimpleForm、Edit、Create这类表单根容器的配置项,不支持直接传给SaveButton组件。直接给SaveButton传transform时,按钮内部没有对应的表单上下文方法来接收这个转换函数,就会抛出setTransform is not a function的错误。

可行解决办法

方案1:自定义按钮配合表单上下文实现按需转换

适合有多个操作按钮(接受/拒绝)需要不同转换逻辑的场景:

import { useFormContext, useSaveContext } from 'react-admin';
import Button from '@mui/material/Button';

const ApproveButton = () => {
  const { getValues } = useFormContext();
  const { save } = useSaveContext();

  const handleApprove = () => {
    const data = getValues();
    // 直接在这里做数据转换
    const transformedData = {...data, approval: true };
    save(transformedData, { redirectTo: 'list' });
  };

  return <Button onClick={handleApprove}>Approve</Button>;
};

// 拒绝按钮同理
const RejectButton = () => {
  const { getValues } = useFormContext();
  const { save } = useSaveContext();

  const handleReject = () => {
    const data = getValues();
    const transformedData = {...data, approval: false };
    save(transformedData, { redirectTo: 'list' });
  };

  return <Button onClick={handleReject}>Reject</Button>;
};

之后把自定义按钮放到表单的Toolbar组件中即可正常使用。

方案2:把转换逻辑提到表单容器层,通过状态区分操作

如果不想自定义按钮,也可以在表单层声明transform,配合按钮传的状态来走不同的转换逻辑:

import { useState } from 'react';
import { SimpleForm, SaveButton, Toolbar } from 'react-admin';

const CustomToolbar = ({ setApprovalStatus }) => (
  <Toolbar>
    <SaveButton
      redirect="list"
      label="Approve"
      onClick={() => setApprovalStatus(true)}
    />
    <SaveButton
      redirect="list"
      label="Reject"
      onClick={() => setApprovalStatus(false)}
    />
  </Toolbar>
);

const YourForm = () => {
  const [approvalStatus, setApprovalStatus] = useState(null);

  const transform = (data) => {
    if (approvalStatus === null) return data;
    return {...data, approval: approvalStatus };
  };

  return (
    <SimpleForm transform={transform} toolbar={<CustomToolbar setApprovalStatus={setApprovalStatus} />}>
      {/* 你的表单字段定义 */}
    </SimpleForm>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 18:30:00