setState 不适用于 ReactJs 中 this.state 内的对象
setState not working for objects inside the this.state in ReactJs
我正在使用 React 中的表单并遇到这个奇怪的问题。
这就是我的组件 class 的样子 -
export default class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
username: 'Bla'
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({[event.target.name]: event.target.value})
}
render() {
return (
<div>
<form onChange={this.handleChange}>
<label> Name: <input type="text" value={this.state.username} name="username" /> </label>
<input type="submit" value="Submit" />
</form>
</div>
);
}
}
这就是呈现的页面在浏览器中的样子。
我可以 update/change 文本框中的文本。
现在我稍微调整了我的组件 class,基本上我更改了 this.state
对象并相应地更新了 HTML 输入元素。
这些是完成的更改-
this.state = {
formEle: {
username: 'Bla'
}
};
<label> Name: <input type="text" value={this.state.formEle.username} name="username" /> </label>
当我在浏览器中呈现页面时进行这两项更改后,除了我无法 update/change 文本框中的内容外,一切都一样。
我的直觉是 this.setState
函数一定有问题,但是当我打印 event.target.name
和 event.target.value
的值时,我得到了预期值。不确定到底出了什么问题。
您无法再更新输入框的原因是您不再设置正确的状态变量。
如果您将 handleChange
事件侦听器更改为如下所示,应该会再次开始工作:
handleChange(event) {
this.setState({
formEle: {
...this.state.formEle,
[event.target.name]: event.target.value,
},
});
}
您指定要从 this.state.formEle.username 读取状态,因此您需要确保设置状态树的特定部分。
希望这对您有所帮助 - 编码愉快!
我正在使用 React 中的表单并遇到这个奇怪的问题。
这就是我的组件 class 的样子 -
export default class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
username: 'Bla'
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({[event.target.name]: event.target.value})
}
render() {
return (
<div>
<form onChange={this.handleChange}>
<label> Name: <input type="text" value={this.state.username} name="username" /> </label>
<input type="submit" value="Submit" />
</form>
</div>
);
}
}
这就是呈现的页面在浏览器中的样子。
我可以 update/change 文本框中的文本。
现在我稍微调整了我的组件 class,基本上我更改了 this.state
对象并相应地更新了 HTML 输入元素。
这些是完成的更改-
this.state = {
formEle: {
username: 'Bla'
}
};
<label> Name: <input type="text" value={this.state.formEle.username} name="username" /> </label>
当我在浏览器中呈现页面时进行这两项更改后,除了我无法 update/change 文本框中的内容外,一切都一样。
我的直觉是 this.setState
函数一定有问题,但是当我打印 event.target.name
和 event.target.value
的值时,我得到了预期值。不确定到底出了什么问题。
您无法再更新输入框的原因是您不再设置正确的状态变量。
如果您将 handleChange
事件侦听器更改为如下所示,应该会再次开始工作:
handleChange(event) {
this.setState({
formEle: {
...this.state.formEle,
[event.target.name]: event.target.value,
},
});
}
您指定要从 this.state.formEle.username 读取状态,因此您需要确保设置状态树的特定部分。
希望这对您有所帮助 - 编码愉快!