如何从 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" 被发送?
- API 必须 return 它,我需要它用于
<Show>
等等..
- 我不会硬编码我的 RestClient 只是为了删除 "type" 因为它是
不仅发生在 "User" 模型中,而且发生在许多其他模型中。
- 我不想 "usset" 它在 API 控制器端。
谢谢!
没有 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 });
我知道 <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" 被发送?
- API 必须 return 它,我需要它用于
<Show>
等等.. - 我不会硬编码我的 RestClient 只是为了删除 "type" 因为它是 不仅发生在 "User" 模型中,而且发生在许多其他模型中。
- 我不想 "usset" 它在 API 控制器端。
谢谢!
没有 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 });