javascript - 如何在反应中设置类属性的值
问题描述
如何访问和设置e.target.value
类的动态setState
?
我试过了this.setState({fields[e.target.name]: e.target.value});
class App extends Component {
constructor() {
super();
this.state = {
data: [],
fields: {
name: ''
}
}
}
handleChange = e => this.setState({fields[e.target.name]: e.target.value});
render() {
const { fields } = this.state;
return (
<>
<input type="text" name="name" placeholder="name" onChange={this.handleChange} value={fields.name} />
</>
)
}
}
export default App;
解决方案
这与这个问题略有相似。有两种方法可以更新对象。正如其他人所说,像这样的嵌套状态是一种反模式。这是一个很好的阅读原因。
1-最简单的一个:
首先创建一个副本,fields
然后在其中进行更改:
let fields = Object.assign({}, this.state.fields); //creating copy of object
fields[e.target.name] = e.target.value //updating value
this.setState({fields});
除了使用,Object.assign
我们也可以这样写:
let fields = {...this.state.fields};
2-使用扩展运算符:
handleChange = e => {
e.persist(); //need to make the values persist because of event pooling
this.setState(prevState => ({
...prevState,
fields: {
[e.target.name]: e.target.value
}
}))
}
推荐阅读
- regex - Nginx 位置正则表达式用于处理 /sub/directories 中多个 WordPress 站点的永久链接
- modulo - 理解数学与编程中的 Mod 运算符
- lisp - 为什么 TIME 报告的字节数因不同的调用而不同?
- c++ - 使用带前缀的字符串查找容器的相等范围
- java - 仅在我调试程序时将文档添加到 Firestore
- pentaho - 将值 [BigNumber] 转换为 BigNumber 时出现意外的转换错误
- excel - 将数据从工作簿(在文本框内)放到另一个工作簿(在工作表中)
- elixir - 透析器不知道:httpc
- redirect - 我无法从 Spotify 为我的应用检索访问令牌
- c# - Unity使用触摸旋转相机 - 移动