Javascript 初始值don';即使他们的状态已经设定,也不会改变
我有一个语义UI模式,它包含一个redux表单作为它的内容。打开模态时,我将表单传递给它的内容道具。表单元素将Javascript 初始值don';即使他们的状态已经设定,也不会改变,javascript,reactjs,redux,semantic-ui,redux-form,Javascript,Reactjs,Redux,Semantic Ui,Redux Form,我有一个语义UI模式,它包含一个redux表单作为它的内容。打开模态时,我将表单传递给它的内容道具。表单元素将initialValues属性设置为映射到状态的属性 <FormModal handleSubmit={ this.sortSubmit } size='small' formName='sortForm'
initialValues
属性设置为映射到状态的属性
<FormModal
handleSubmit={ this.sortSubmit }
size='small'
formName='sortForm'
header='Sort'
headerIcon='sort'
content={
<SortForm table={ this.props.table } initialValues={ { orderBy: this.props.search.orderBy, orderDirection: this.props.search.orderDirection } } />
}
trigger={
<Button icon floated='right' size="mini">
<Icon name='sort' />
</Button>
}
/>
然后,我通过更改redux状态来更改this.props.search.orderBy。应用程序中的所有内容都会更新以反映更改,但此redux表单的初始值除外,该初始值应在状态更改时更改。我再次打开模式,字段被重置为旧的初始值,而不是新设置的值
你知道为什么会这样吗
在一个可能相关的注释中,重新呈现模态JSX似乎并没有关闭模态。因为模态的初始状态是关闭的,所以我假设重新呈现它会重新关闭它。您需要将
enableReinitialize={true}
传递给表单
因为enableReinitialize
默认为false。在这种情况下,initialValues
仅应用于组件willmount
以下是文档中关于启用重新初始化的部分:
当设置为true时,每次
初始值属性更改。默认为false。如果
如果还设置了keepDirtyOnReinitialize选项,则表单将保留
重新初始化时脏字段的值
有关更多信息,请阅读谢谢,但不幸的是,我已经尝试过了,还有keepDirtyOnReinitialize道具。两者似乎都没有效果。我认为文档中提到的方法不适用于从表单的JSX标记传入的道具,因为某些原因。我最终通过在表单组件中使用
connect
将状态直接映射到props来解决这个问题,它最终开始工作。但这是一个令人沮丧的问题,因为我希望能够从表单组件外部控制初始值。可能只是坏了,你是对的initialValues
应该传递给reduxForm
而不是实际的表单。。。以及启用重新初始化
。排序格式
与我认为的有点不同。@dqhendricks,你能用你提出的解决方案更新你的帖子吗?我在这件事上耽搁了一段时间。使用react表和redux表单。在react表排序中,表单的初始值不会更改。@NathanCH我想我最终发现,通过prop传递的任何内容在更改时都不会更新。我必须找到一种不同的方法将数据传送到对象。