如何从 SimpleForm 中排除字段

How to exclude fields from SimpleForm

我知道 <SimpleForm> 正在使用 redux-form。 我想在提交表单时排除发送特定字段。 当我编辑我的实体 "User" 时,RestClient 发送一个 GET_ONE 请求,而我的 API 响应如下:

{
name: "Lior",
age: "100",
type: "Manager",
}

<SimpleForm>是这样的:

<SimpleForm> 
  <TextInput source="name"/>
  <TextInput source="age"/>
</SimpleForm>

当我发送表单时,我在请求中看到的字段是:姓名、年龄和 类型 即使没有 "input" 或 "field" 对于 type.

如何避免 "type" 被发送?

谢谢!

没有 react-admin 方法可以做到这一点。我认为 restClient 中间件是可行的方法,但您不希望那样。您可以做的是使用 mapProps 的重构创建一个 HOC,并用它包装 SimpleForm。类似(未经测试的代码):

const withLimitedProps = properties => mapProps(({save,...props}) => ({...props,save: (record,redirect) => save(properties.reduce((acc,property)=>{
  acc[property]=record[property]
},{})});

const UserEditForm = withLimitedProps(['name','age'])(SimpleForm)

保存属性被代理,提交的记录被减少。您始终可以添加更多功能,例如从 redux-form 状态中选择当前字段并仅减少它们。这将提供您想要的行为。

您可以自定义 restClient 在调用 UPDATE 时仅发送部分字段:

case UPDATE:
    url = `${apiUrl}/${resource}/${params.id}`;
    options.method = 'PUT';
    const { name, age } = params.data; // type is ignored
    options.body = JSON.stringify({ name, age });