Reactjs 使用props.initialize()重新执行表单初始化

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()

我们最近在redux表单中发现了一些奇怪的行为(使用6.7.0)。我们在componentDidMount()/componentWillMount()中初始化数据时使用的代码如下:

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
也解决了问题。不知道为什么需要这样做。