我们的应用程序有一个页面,管理员可以为我们的客户报价。
引用由一个或多个“工作”组成。例如,如果引用的是安装冰箱和做庭院作业,那么引用将包括以下两项工作:
还有其他与作业相关的元数据,这些元数据需要创建/编辑单个作业的整个其他形式。
因此,用于创建/编辑单引号的页面由两种形式组成:
我有一个顶级容器组件,它呈现以下2个Redux表单组件:
{/* IN CONTAINER COMPONENT */}
<JobModalForm
onSubmit={this.saveJob}
/>
<QuoteForm
initialValues={quote}
onSubmit={this.updateQuote}
updateQuote={this.updateQuote}
deleteQuote={this.deleteQuote}
publicQuoteUrl={this.props.publicQuoteUrl}
linkCopied={() => { this.props.snackbarString('link copied!') }}
/>这两种表单都存储在表单状态的不同部分:
--form |
| -- quote
|
| -- job然而,这两种形式必须相互交流。
都在工作,除了一件事:
当我第一次更新作业(无论是预先存在的使用initialValues还是新添加的作业)时,更新是有效的:如果我更改作业的价格,QuoteForm将呈现新的价格。这是通过reduxForm的arraySplice完成的
// in container component ...
// onSubmit handler for JobModalForm
saveJob = (job, dispatch, props) => {
// if this is an existing job (whether or not it has been created in the db or not)
// update it
// else
// append the job to the existing quote
if (job._id || job.fresh) {
const action = arraySplice('quote', 'jobs', job.index, 1, job)
dispatch(action)
} else {
dispatch(arrayPush('quote', 'jobs', job ))
}
dispatch({ type: JobModalActions.TOGGLE_MODAL })
}但是,对的后续更新--QuoteForm的ArrayField中的任何现有字段--都不会触发render。在我的初次更新后改变任何工作的价格都不会引起我的反应。
Redux成功地分发了一个操作,存储的form键确实包含更新的字段。
奇怪的是,创建任意数量的就业确实有效(如上面所示,通过arrayPush )。
我完全不知所措,需要一些帮助才能弄清楚为什么JobModalForm的表单提交只适用于新的工作。
附录
下面是一个复制此问题的示例:https://www.webpackbin.com/bins/-KgoQMIyvxdJb7Pvh0eu
软件包的版本:
"react-redux": "^4.4.1",
"redux": "^3.3.1",
"redux-form": "^6.5.0",
"redux-form-material-ui": "^4.1.2",JobModalForm
export default connect(mapStateToProps, mapDispatchToProps)(reduxForm({
form: 'job',
enableReinitialize: true
})(JobModal))QuoteForm
export default connect(null, mapDispatchToProps)(reduxForm({
form: 'quote'
})(QuoteForm))https://stackoverflow.com/questions/43173846
复制相似问题