【发布时间】:2020-12-30 07:27:34
【问题描述】:
我对反应非常陌生,并且在理解 useState Hook 方面存在问题 - 或者更具体地说是 previousState 的方面。
一个普通的 useState Hook,可能是最常见的例子,如下所示:
import React, { useState} from 'react';
export default function CounterHooks({ initialCount }){
const [count, setCount] = useState(initialCount);
return (
<div>
<button onClick={() => setCount(count -1)}>-</button>
<span>{count}</span>
<button onClick={() => setCount(count + 1)}>+</button>
</div>
)
}
目前我的理解如下:
- 我调用 useState() 函数/Hook?并传入初始State(initialCount)的参数
- 我取回了一个数组,我立即将其分解为变量 count 和 setCount(其中 是函数)
- 使用 setCount() 我可以更新状态,从而更新计数变量
到目前为止一切都很好,我认为... ;)
有时我会看到与 prevState (prevCount) 相同的反例,但我不明白:
<button onClick={() => setCount(prevCount => prevCount -1)}>-</button>
这里发生了什么?这部分我不明白。 到目前为止我的想法:
- 在这种情况下,我以某种方式访问了之前的计数值。
- setCount 现在需要一个函数
- setCount 现在异步运行
- 这个函数是从哪里来的?
- prevCount 来自哪里?
- 当我运行此程序时,prevCount 中放入了什么?
你明白我的困惑吗?我不知道我应该如何以不同的方式构建这个......
非常感谢您的帮助。
【问题讨论】:
-
你说的都是对的。 state setter 函数可以接收一个函数而不是一个值。如果 setter 接收到一个函数,它将调用该函数来设置具有函数返回值的状态。此外,它会将
previousState作为参数传递给该函数。这是您可以根据先前状态更改状态的方法。请在此处找到更详细的答案:stackoverflow.com/questions/56404819/… -
您好安德烈,感谢您的帮助。我在文档中阅读了这一点,但我不明白:reactjs.org/docs/hooks-reference.html#functional-updates。我不明白的是:我将什么函数传递给 setState()/setCount()。
-
“我不明白的是:我将什么函数传递给 setState()/setCount()。” 一个接受单个参数的函数(之前的值)并返回新值(可能基于也可能不基于先前的值)。也许关于
setState的文档使它更清晰(接近尾声):reactjs.org/docs/react-component.html#setstate。如果新状态不依赖于前一个状态,则无需传递函数。
标签: javascript reactjs react-hooks