javascript - 是否可以使用相同的函数来设置不同对象的状态
问题描述
我想弄清楚是否可以捕获输入/复选框 onchange 事件并从同一函数更新状态?这背后的原因是我还在学习 React 并且想学习如何正确保存状态。
我试图通过以下方式保存状态,但我可能会犯一些错误:
constructor(props) {
super(props);
this.state = {
list: [],
test: {
text: "placeholder",
age: null
},
anotherTest: {
name: "",
info: ""
}
};
handleChange = e => {
var target = e.target.name;
var value = e.target.value;
this.setState({
...this.state,
[target]: value
});
};
和渲染:
<input name="text" value={this.state.test.text} onChange={e => this.handleChange(e)} />
<input name="name" value={this.state.anotherTest.name} onChange={e => this.handleChange(e)} />
我在这个例子中创建一个新状态而不是更新目标对象。
整个测试环境:
解决方案
你快到了。只需将其更改为:
this.setState(prevState => ({
anotherTest: {
...prevState.anotherTest,
[target]: 'something'
}
}))
如果要重用函数,请执行以下操作:
handleChange = (e, stateValue) =>
this.setState(prevState => ({
[stateValue]: {
...prevState[stateValue],
[target]: 'something'
}
}))
然后这样称呼它:
e => this.handleChange(e, 'name')
或者
e => this.handleChange(e, 'anotherTest')
推荐阅读
- r - 从 R 中的所有列中检测 Dataframe 中的重复项
- python - 如何获取python字典中键的值
- odata - OData $expand 具有不同的数据库上下文
- amazon-cloudformation - Tableau-cluster-linux Cloudformation 模板在创建堡垒自动缩放组时失败
- c - 无法为绑定套接字分配请求的地址
- javascript - 向 API 发送请求以接收 JSON 并将其作为原始 JSON 文本附加到文档中
- c# - 使用 .NET CORE 3.1 下载 SFTP
- linux - platform_driver 和 *_ops 结构中的函数之间的区别
- python - 如何使用 Python Celery 在不同的服务器上执行任务?
- elasticsearch - 是否有任何工具可用于生成弹性搜索映射