首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有意识到状态的变化。

没有意识到状态的变化。
EN

Stack Overflow用户
提问于 2017-04-02 21:41:18
回答 1查看 374关注 0票数 1

我们的应用程序有一个页面,管理员可以为我们的客户报价。

引用由一个或多个“工作”组成。例如,如果引用的是安装冰箱和做庭院作业,那么引用将包括以下两项工作:

  • 冰箱安装-$xx
  • 庭院作业- $yy

还有其他与作业相关的元数据,这些元数据需要创建/编辑单个作业的整个其他形式。

因此,用于创建/编辑单引号的页面由两种形式组成:

  1. 报价表格用于处理报价的货币、报价的标题、切换作业和删除作业。
  2. 作业表单(以模式的形式),用于处理职务名称、职务说明和列出要为该工作完成的工作的项目列表。

我有一个顶级容器组件,它呈现以下2个Redux表单组件:

代码语言:javascript
运行
复制
    {/* 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!') }}
    />

这两种表单都存储在表单状态的不同部分:

代码语言:javascript
运行
复制
--form |
       | -- quote
       |
       | -- job

然而,这两种形式必须相互交流。

都在工作,除了一件事:

当我第一次更新作业(无论是预先存在的使用initialValues还是新添加的作业)时,更新是有效的:如果我更改作业的价格,QuoteForm将呈现新的价格。这是通过reduxForm的arraySplice完成的

代码语言:javascript
运行
复制
  // 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

代码段

软件包的版本:

代码语言:javascript
运行
复制
"react-redux": "^4.4.1",
"redux": "^3.3.1",
"redux-form": "^6.5.0",
"redux-form-material-ui": "^4.1.2",

JobModalForm

代码语言:javascript
运行
复制
export default connect(mapStateToProps, mapDispatchToProps)(reduxForm({
  form: 'job',
  enableReinitialize: true
})(JobModal))

QuoteForm

代码语言:javascript
运行
复制
export default connect(null, mapDispatchToProps)(reduxForm({
  form: 'quote'
})(QuoteForm))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-03 15:21:51

我意识到这只是Redux表单中的一个比较问题,而不是我的来源。

这里是问题所在。如您所见,Field不允许用户进行深度比较就可以进行浅比较。

实际上,在回购(链接)中有一个PR来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43173846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档