javascript - 为什么有2个setState可用

标签 javascript reactjs

假设我有一个状态,

state = {
  counter: 0
}

单击按钮时我想更新状态。

我的 updateCounter 函数是这样的,

updateCounter = () => {
    this.setState({counter: 1})
}

效果完美。

我遇到过人们使用这个的情况,

updateCounter = () => {
    this.setState(prevState => ({
       ...prevState,
       counter: prevState.counter + 1
    }))
}

我的问题是,

  1. 它们有什么区别?

  2. 为什么我们有 2 个 setState?

  3. 使用任何一个都会有性能提升吗?

最佳答案

存在第二个变体,以便您可以根据旧状态计算新状态。如果这是您需要做的事情,您应该使用第二个,否则您可能会遇到微妙的错误,因为您没有将状态设置为您期望的值。如果您的新状态与之前的状态无关,那么您使用哪一个都没有关系。

P.s,在此代码中不需要传播先前的状态。在类组件的 this.setState 中,React 将为您进行浅层合并:

this.setState(prevState => ({
   ...prevState, // <-- not needed
   counter: prevState.counter + 1
}))

关于javascript - 为什么有2个setState可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977791/

相关文章:

javascript - 在 angularjs 中处理 json 响应(来自 PHP 和 mysql)

javascript - knockout : implementing "focusing" on object from list

javascript - JavaScript引擎是如何执行的?

javascript - 使用 reactjs 在 redux 中未定义调度

javascript - 创建需要 jQuery 的可嵌入 JS,如何不覆盖现有 jQuery

javascript - 无法使用 imageSource 模块在 Nativescript/Javascript 中保存 URL 中的图像

javascript - React Native WebP 格式图像有时会消失

javascript - GTM层不推送数据

javascript - 等待循环结束然后在 Javascript 中执行操作的最优雅的方法是什么?

reactjs - 如何在 Reach Router 中使用不同的布局?