javascript - 为什么在反应中更新状态时状态会以这种方式表现
问题描述
我有我的状态
this.state = {
data: [],
dataloaded: false,
isopen: false,
firstname: '',
lastname:'',
email:'',
gender: '',
avatar: '',
number:'',
dob:new Date()
};
我有更新状态的表格,
每个文本输入都有这样的 onchangeonChange={this.handleOnChange("firstname")}
我的 hndleOnChange 函数是:
handleOnChange = field => event => {
console.log(event.target.value,field)
this.setState({field: event.target.value})
}
这不起作用 这不是更新状态,但如果我这样做
handleOnChange = field => event => {
console.log(event.target.value,field)
this.setState({[field]: event.target.value})
}
这行得通
为什么在对象名前面添加括号会正确?
解决方案
添加括号意味着该value
变量的 成为对象键。如果没有括号,文字名称将成为对象键。举个例子:
const key = "name";
const object = {
key: "My Key",
name: "My Name"
};
obj.key // "My Key"
obj[key] // "My Name" -> equivalent to obj["name"] or object.name
查看 MDN 的使用对象了解更多信息。
在您的情况下,此代码:
handleOnChange = field => event => {
console.log(event.target.value,field)
this.setState({field: event.target.value})
}
正在尝试设置一个名为 的状态属性field
,而不是与字段变量的值关联的状态属性。
推荐阅读
- ethereum - 普通的以太坊地址能收到 USDC 代币吗?
- curl - 将 Postman 集合批量导出到包含 curl 请求的文件
- mysql - Java应用程序未使用docker-compose与mysql容器连接
- node.js - 如何模拟一个函数并期望它被调用?
- python - Python/Pygame - 将 spritesheet 作为索引矩形数组导入
- c++ - 在 Windows 上简化 g++ 命令
- php - Godot HTTPRequest 向 php 网站发送数据在 php 网站上始终为空
- java - Swagger Parser 没有从 swagger.json 获取所有路径
- java - 从 Firebase 存储中检索图片下载 url
- reactjs - 从 React-Bootstrap 输入获取数据