Reactjs 使用props.initialize()重新执行表单初始化
我们最近在redux表单中发现了一些奇怪的行为(使用6.7.0)。我们在componentDidMount()/componentWillMount()中初始化数据时使用的代码如下:Reactjs 使用props.initialize()重新执行表单初始化,reactjs,react-redux,redux-form,Reactjs,React Redux,Redux Form,我们最近在redux表单中发现了一些奇怪的行为(使用6.7.0)。我们在componentDidMount()/componentWillMount()中初始化数据时使用的代码如下: componentWillMount() { this.props.initialize({type:'http',field:'A Value'}); ... } 但是,只有当我们执行此初始化代码时,我们的提交函数才不会接收正在编辑的值,而是接收初始值。此外,编辑值时不再调用onChange()
componentWillMount() {
this.props.initialize({type:'http',field:'A Value'});
...
}
但是,只有当我们执行此初始化代码时,我们的提交函数才不会接收正在编辑的值,而是接收初始值。此外,编辑值时不再调用onChange()侦听器。另一方面,form/myform中的状态已正确更新,我可以看到其中的值正在更新。
如果我将initialize()调用替换为change操作的dispatch(),则对于每个属性:
this.props.dispatch(change("myform","type",'http'));
this.props.dispatch(change("myform","field",'A Value'));
那就行了!。似乎initialize()替换了整个对象并中断了一些内部引用
使用initialValue似乎也能正常工作
很多例子都在使用props.initialize(),但我们无法让它工作。应该在什么上下文中调用props.initialize()?我必须在页面加载时使用数据库中的现有数据填充表单,并在进行更改时进行更新。下面的方法对我很有效 确保将
enableReinitialize
和keepDirtyOnReinitialize
的值设置为true
export default reduxForm({
validate,
form : 'YourFormName',
enableReinitialize: true,
keepDirtyOnReinitialize : true
})(connect(mapStatetoProps, { actionReducers }(YourClassName))
然后从ComponentDidMount()
启动this.props.initialize()
。现在使用状态来确保它只发生一次,而不是每次更新任何组件时
componentDidMount(){
this.props.dispatch(actionReducer(parameter)).then(()=>{
this.props.initialize(this.props.data)
this.setState({load:true})
})
}
您是否测试了组件willmountvs
componentDidMount
以确保两者的行为都是错误的?我在componentDidMount
中使用了initialize
,从来没有遇到过像您这样的问题。是的,我测试了这两个问题。思想keepDirtyOnReinitialize:true
不需要仍然解决了问题。对我来说,keepDirtyOnReinitialize:true
也解决了问题。不知道为什么需要这样做。