有人可以在功能下方逐行解释我吗
handleChange(e) {
let fields = this.state.fields;
fields[e.target.name] = e.target.value;
this.setState({
fields
});
以我的理解
fields[e.target.name] = e.target.value;
有人可以逐行向我解释以上功能吗?
答案 0 :(得分:0)
fields [e.target.name] (此字段也用于访问对象属性)。
var obj = {name:'abc', color:'red'}
console.log(obj.name) // this print 'abc'
console.log(obj['name']) // also print 'abc'
使用obj ['xxx']语法,您可以动态读取对象并为其设置属性。 参考https://www.w3schools.com/js/js_objects.asp
因此,在您遇到的问题中, fields 变量采用了本地状态下的现有fields对象。并且在每个事件中,它使用该事件目标名称创建新属性,并将该事件目标值添加为该新属性值。如果该属性名称已存在于 fields 对象中,则仅修改该属性的值。
所以在您的列表中,
答案 1 :(得分:0)
此代码使您可以使用对象表示法在组件状态中动态更改字段的值。 object[]
通过使用fields[event.target.name]
,您将在组件状态下查找与导致事件发生的元素名称匹配的字段。然后看起来您正在使用event.target.value
为什么这样有用
比方说,您有一个要从用户检索多个输入的组件。没有对象符号,您可能最终会写出非常重复的代码,例如为每个输入编写不同的事件处理程序,以便确定在组件状态下要更新的字段:
坏:
handleOnChange1 = (event) => (this.setState({userName: event.target.value}))
handleOnChange2 = (event) => (this.setState({lastName: event.target.value}))
但是,通过命名元素并在组件状态下将它们与匹配字段进行协调,只要您使用对象标记,您就不必担心编写其他事件处理程序。
好:
class UserForm extends React.Component{
state = {
firstName: "",
lastName: ""
}
handleOnChange = (event) => {
this.setState({
[event.target.name]: event.target.value
})
}
render(){
return(
<div>
<input name="firstName" value={this.state.firstName} onChange={this.handleOnChange}/>
<input name="lastName" value={this.state.lastName} onChange={this.handleOnChange}/>
</div>
)
}
}