react-form:如何在combineReducers中使用多个表单?

时间:2017-05-05 16:21:44

标签: reactjs redux redux-form

免责声明:有可能这个问题看起来很愚蠢,因为我可能忽略了文档中任何明显或不言而喻的事情。现在我的reducer-setup看起来像这样:

import editBlogEntryForm from './blog/editBlogEntryForm';
import login from './login'; // <-- a directory with index.js
import blog from './blog';   // <-- a directory with index.js

export default combineReducers({
    blog: blog,
    login: login,
    form: editBlogEntryForm
});

将来我应该在哪里放置其他表格? 了解更多关于分离reducer的信息,我将bloglogin reducers移动到他们自己的目录/文件中,我使用reducer组合。但似乎我无法移动form任何地方,它必须保持顶级,这是没有意义的,如果我以后想要引入登录表格左右。我希望我不必将所有内容都放在同一个form-reducer中,从而产生一个非常大的switch语句?

我已经尝试将form: editBlogEntryForm“向下”移动到blog缩减器中,但表单会停止工作/更新。

以下是我的容器组件中reduxForm调用表单:

EditBlogEntryFormContainer = reduxForm({
    form: 'EditBlogEntryForm',
    validate
})(EditBlogEntryFormContainer);

有人可以指出正确的方向吗?

来自redux-form-docs http://redux-form.com/6.6.3/docs/GettingStarted.md/我得到了这个:

  

请注意,默认情况下,用于将redux-form reducer传递给的键   combineReducers应该命名为form。虽然有支持   自定义键名称,请参阅getFormState配置以获取更多详细信息。

2 个答案:

答案 0 :(得分:1)

感谢@Thijs Steel和他指向我getFormState的{​​{1}}道具(参见文档http://redux-form.com/6.6.3/docs/api/ReduxForm.md/),我找到了一个解决方案,它使用详细的表单名称和状态-地点。虽然我仍然无法按照有关reduxForm()的文档说明:

  

很少需要此功能,默认为假设   reducer安装在表格键下。

我认为我们的应用程序中都需要多个表单和表单缩减器,因此使用getFormState似乎是我的标准情况。但是,我仍然不确定,我可能错过了任何明显的事情。

解决方案是使用redux-form更改form-component的连接,如下所示:

getFormState

因此,任何表单都可以从应用程序状态的任何位置获得其状态,从而使多种形式成为可能。

不使用getFormState是默认使用状态顶级的EditBlogEntryFormContainer = reduxForm({ form: 'EditBlogEntryForm', getFormState: (state) => state.blog.editBlogEntryForm, // <-- your form reducer location validate })(EditBlogEntryFormContainer); - reducer,这会导致:

form

答案 1 :(得分:0)

首先,如果您想在Future中添加另一个表单,可以将其称为form2:...(或其他一些更合适的名称)。

当您向下移动表单时,您是否也使用combinereducers来组合较低级别的表单?如果是这样,请记住要访问状态,您需要执行state.blog.form和state.blog.main