2017-12-18 95 views
0

我使用Redux作为用于编辑当前选定项目(包含这些属性:“name”和“selected”)的名称的组件中的初始状态。它用作本地初始状态,因为我只想在点击保存按钮(我还没有实现)时更新Redux全局状态。使用Redux作为初始组件状态

constructor(props) { 
    super(props) 
    this.state = { 
     item: this.props.item 
    } 
} 

我的渲​​染功能包括编辑名称输入:

<TextField 
    id={"name"} 
    value={this.state.item.name} 
    onChange={e => this.updateName(e.target.value)} 
/> 

的updateName()函数是:

updateName = (value) => { 
    var newItem = this.state.item 
    newItem.name = value 
    this.setState({item: newItem}) 
} 

在这里,我可以选择的项目,对默认的值在所选项目的名称后面输入更改(当我选择一个项目时,Redux的状态会更新,组件的状态和输入中的文本也会更新)。一切都按照计划进行。

当我写入输入时,写入的文本会改变,但是选择项目的操作不会再更新输入的文本(它应该跟随从Redux中选择的项目的名称,就像我输入文本之前一样)。

是否因为使用this.setState()更新组件状态后,对this.props.item的引用(以及后来的Redux更新)就会丢失?但是我怎样才能纠正这个问题呢?

回答

1

请记住,constructor仅被调用一次,而您的输入是由您的状态命令的受控组件。

您需要做的是根据redux状态更新组件状态,以便在componentWillReceiveProps方法中对此进行更新。

请注意:使用道具更新状态被认为是反模式。

+0

它解决了这个问题,谢谢! – Noha

相关问题