javascript - 对一个对象反应 setState 不正确
问题描述
我是 React 新手,我想在输入更改其值时更新对象的状态。
我已经搜索了一些与此相关的参考资料,并且有几种解决方案,例如this。但是,它对我来说不能正常工作。
应用此解决方案,我得到的值不正确。例如,我键入输入值:“name”,但我得到的值只有“nam”。最后一个字符丢失。
这里有什么问题?这里有人可以帮助我吗?提前谢谢你。
这是我的组件 AddHero.js 的代码
import React, { Component } from 'react';
class AddHero extends Component {
constructor(props) {
super(props);
this.state = {
hero: {}
};
this.addHero = this.addHero.bind(this);
this.nameChange = this.nameChange.bind(this);
}
addHero() {
}
nameChange(event) {
var temp = {...this.state.hero};
temp.Name = event.target.value;
this.setState({hero:temp});
console.log(this.state.hero.Name);//the value of Name is always missing the last character from the input
}
render() {
return (
<div>
<div className="name">
<label>Name: </label>
<input type="text" id="Name" onChange={this.nameChange} />
{/* <p class="alert alert-danger invalid" >Invalid Name</p> */}
</div>
<div className="submit">
<button type="button" onClick={this.addHero} >Add new</button>
</div>
</div>
);
}
}
export default AddHero;
这是快照:
解决方案
该setState
方法不会立即更改组件的状态。但是,解决您的问题的一种方法是使用setState()
方法的回调(在状态更改生效时调用该回调)。
考虑以下内容,它显示了在状态更改生效后如何记录组件的状态:
nameChange(event) {
var temp = {...this.state.hero};
temp.Name = event.target.value;
this.setState({hero:temp},
() => { // Callback called when state change has been applied
// Prints the latest state for hero.name
console.log(this.state.hero.Name);
});
}
推荐阅读
- piranha-cms - 获取/设置块上的列表字段
- unity3d - 尝试启动 Unity / Unreal Engine 时收到错误 (API-MS-WIN-CRT-MATH)
- syntax - 在复杂条件下避免过多的括号
- cmake - CMake:所有子目录的 source_group
- elasticsearch - Windows 中无法识别 Elastic Search curl 命令
- c# - 解析作为 exe C# 的进程启动信息参数提供的 json 字符串
- bootstrap-4 - 打开模态时背景图像跳转
- python - 在抓取网站时,空值被解析为“N/A”字符串
- swift - 如何在嵌套类之外使用枚举
- powershell - 使用 PowerShell 安装 SCCM 包