我有一个具有文本输入字段的子组件,该文本输入字段的值应使用父组件(this.props.index
)中的props初始化。
这应该是受控输入,因为我希望能够存储输入的文本。
现在,如果我将值设置为状态的属性,则只要重新渲染组件,就永远不会更新,因为永远不会调用setState:
<input type={"text"} placeholder={"Index"} className={"form-control"}
value={this.state.index} onChange={this.updateStudentIndex}/>
另一方面,如果我将值设置为道具的属性,则该属性是固定的,无法进行更改:
<input type={"text"} placeholder={"Index"} className={"form-control"}
value={this.props.index} onChange={this.updateStudentIndex}/>
如何既可以用this.props.index
初始化状态,又可以跟踪输入值this.state.index
的变化?
编辑:初始化应在异步模式下完成,即当我单击父组件中的按钮时。
答案 0 :(得分:0)
如果您熟悉The Component Lifecycle
,请使用componentWillReceiveProps
,然后在此处设置新的state
componentWillReceiveProps(nextProps) {
if(this.props.index !== nextProps.index) {
this.setState({index: nextProps.index})
}
}
您可以将值保留在state
中,因此在componentWillMount
上将state.index
设置为props.index
答案 1 :(得分:0)
我认为default values在这里可能会有所帮助。
答案 2 :(得分:0)
在constructor
中,从props
读取值并将其设置为state
,这样您将获得props.index
并保持{{1} }后记。在state
事件处理程序中,您可以使用当前值更新onChange
。
index
希望这会有所帮助!
答案 3 :(得分:0)
找到解决方案,这不应使用受控组件来完成,而应使用uncontrolled components