给出这个初始状态:
this.state = {
person: { id: 1, name: "Liero" }
};
当我绑定这样的输入时:<input value={this.state.person.name} />
然后我将输入设为不可编辑。我知道它会使状态和DOM元素不同步。
<小时/> 但是,当我使用defaultValue时:<input defaultValue={this.state.person.name} />
,
我放弃了从代码中更改此人姓名的可能性(例如,当我想重置表单时)。
<小时/> 当我手动同步状态和输入值时:
<input value={this.state.person.name}
onChange={(evt) => this.state.person.name = evt.target.value }/>
在我调用setState或强制刷新之前它不起作用?
每当输入值发生变化时,我是否真的需要强制渲染整个组件,当我想要从代码中控制person.name
时是否可以?
答案 0 :(得分:0)
而不是直接设置this.state.person.name
。致电this.setState
。
这将触发另一个渲染周期,然后将this.state.person.name
绑定到value
:
<input value={this.state.person.name}
onChange={(evt) => {
this.state.person.name = env.target.value;
this.setState({person:this.state.person});
}}/>
答案 1 :(得分:0)
你的意思是setState()而不是改变状态吗?像这样:
class MyComponent extends Component {
state = { person: { id: 1, name: "Liero" } }
updateName = (e) => {
this.setState({
person: {...this.state.person, name: e.target.value}
})
}
render (){
return (
<input type="text" onChange={this.updateName} value={this.state.person.name} />
);
}
}