2017-10-20 136 views
0

我有一个列表,我尝试为每个项目创建表单以分别提交它们,每一行都是动态添加的。我用compose()动态地创建表单的每个名字,像这样:Redux Form,动态名称形式暗示re registeredFields

return { 
    formName: ownProps.form 
} 

而且我在子组件传递表单名称这样的(列表项),列表从减速到:

list.map((item, index) => (
    <RowAuthorizations form={`${formName}[${index}]`} onSubmit={this.submitRowAuthorization} /> 
)) 

当我尝试刷新我的列表域,但没有选择的值从减速机:

tenant.users.filter((x) => x.id !== action.payload.id) 

领域的价值已经被删除,但记数eredFields重新出现当我的组件重新呈现没有删除值的列表。

当我添加字段:

Add the Field :

当我删除领域:

Remove the field

+0

删除减速器中的字段?减速器不应该改变任何东西! –

+0

减速器只筛选列表以删除选定的项目,之后,我的组件重新呈现更新列表 – user3703539

回答

0

最后,我解决我的问题:

您需要添加嵌套对象并添加destroyOnUnmount:true(默认为t如果你把它改成false)。 registeredField覆盖每个字段时,它已被挂载,这就是为什么我的领域不注销。

如果您想要创建一个列表并单独提交每一行(每一行都是一个表单),您需要使用mapStateToProps(从容器传入的动态名称)为表单添加一个动态名称,并由中间组件这样的:

return { 
    formName: ownProps.form 
} 

该表格名称需要传递有道具给每个孩子(表格行):

{ list.map((item, index) => { 
     return <RowAuthorizations form={`${formName}[${index}].${name}`} onSubmit={this.submitRowAuthorization} /> 
    }) 
} 

名称是包含registeredField,价值观,子对象......所以你必须user [0] .user.value如果你使用formReducer.plugin({}),你想从你的减速对于这种情况的处理表单遵循这个步骤S1不像用户[0] .values

让我知道,如果我是对的。