如何从SimpleForm中排除字段

时间:2018-02-03 18:16:33

标签: admin-on-rest

我知道<SimpleForm>正在使用redux-form。 我想在提交表单时排除发送的特定字段。 当我编辑我的实体&#34;用户&#34; RestClient发送GET_ONE请求和我的API响应:

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

<SimpleForm>是这样的:

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

当我发送表单时,我在请求中看到的字段是:姓名,年龄和类型,即使没有&#34;输入&#34;或&#34;字段&#34; 类型

我怎样才能避免&#34;输入&#34;要发送?

  • API必须返回它,我需要<Show>以及更多..
  • 我没有硬编码我的RestClient只是为了删除&#34;类型&#34;因为它是 不会发生在&#34; User&#34;模型,但在许多其他模型。
  • 我不想&#34; usset&#34;它在API控制器端。

谢谢!

2 个答案:

答案 0 :(得分:1)

没有反应管理方式来做这件事。我认为一个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状态中选择当前字段并仅减少它们。这将提供您想要的行为。

答案 1 :(得分:1)

您可以自定义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 });