javascript - 为什么在 react 中更新状态时状态会以这种方式表现

标签 javascript reactjs ecmascript-6

我的状态是这样的

this.state = {
      data: [],
      dataloaded: false,
      isopen: false,
      firstname: '',
      lastname:'',
      email:'',
      gender: '',
      avatar: '',
      number:'',
      dob:new Date()
    };

我有表格来更新状态,
每个文本输入都有 onchange,例如 onChange={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})
  }

这有效

为什么在对象名前面添加括号就正确了?

最佳答案

添加括号意味着该变量的成为对象键。如果没有括号,文字名称将成为对象键。举个例子:

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 的 Working with Objects了解更多信息。

在您的情况下,这段代码:

handleOnChange = field => event => {
    console.log(event.target.value,field)
    this.setState({field: event.target.value})
}

正在尝试设置名为 field 的状态属性,而不是与字段变量的值关联的状态属性。

关于javascript - 为什么在 react 中更新状态时状态会以这种方式表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416127/

相关文章:

javascript - 是否可以创建一个 require.js 模块来决定何时完成加载?

javascript - Webpack bundle 拆分会产生空的 bundle.js

javascript - 添加博客文章后 Redux 状态未更新

javascript - 为什么物体不移动到坐标?

javascript - 无法从数组中获取信息

javascript - 您如何使用 Google Maps API 监听对 POI 的点击?

reactjs - 建筑商到世博会

javascript - 如何渲染 react 组件

cordova - 哪些版本的 iOS 和 Android webview 已经支持 ES6 模块?

javascript - AngularJS 中短名称和全名的自定义过滤器