javascript - setState嵌套对象使用es6 spread

标签 javascript reactjs ecmascript-6

我有这样的默认状态:

this.state = {
  location:{
    lat: 1234,
    lng: 3245
  }
}

所以每次我想更新纬度或经度时我都必须这样做

this.setState({ location: {...this.state.location, lat: newLate} })

this.setState({ location: {...this.state.location, lng: newLng } })

如果我的组件中有多个 setState,我必须编写很多 ...,如果我要使用一层嵌套对象,情况会更糟。此外,这样做很危险 {this.state.location.lat} 因为它会出错,如果未定义位置,它会使整个应用程序崩溃。当您在 React 中处理多个嵌套的对象数组或对象时,有什么提示?

最佳答案

只要有可能,尽可能保持状态“平坦”。

在你的情况下,你可以简单地做:

this.state = {
  lat: 1234,
  lng: 3245
}

随着你的状态变大,使用命名来隔离不同的属性

this.state = {
  locationLat: 1234,
  locationLng: 3245
}

即使在具有数百个组件的应用程序中,我也永远不需要使用嵌套状态。

补充说明:

  • 每当看到这种模式时,将您的组件拆分成更小的部分
  • 如果您知道每次都会更新整个对象,则只使用嵌套对象

从您的位置对象:

const location = {
    lat: 1234,
    lng: 3245
}

像这样初始化你的状态:

this.state = location

关于javascript - setState嵌套对象使用es6 spread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48415251/

相关文章:

javascript - 必须按 2 次提交按钮才能实际提交 - AJAX

reactjs - 即使该组件的 props 或状态没有改变,React shouldComponentUpdate() 也会被调用

reactjs - Framer Motion 退出动画未使用 Reach Router 触发

javascript - ES6 中类的引用丢失

javascript - 使用 jQuery、AJAX 动态更改表单

javascript - socket.io 事件和自定义事件

javascript - 为什么窗口的宽度为空?

reactjs - react Helm 服务器端正确设置

node.js - 谷歌云功能|无法加载提供的模块 - 错误 [ERR_REQUIRE_ESM] : Must use import to load ES Module:/workspace/index. js

javascript - 如何直接调用对象父类的setter?