我对React比较陌生,不太理解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)并传入初始状态的参数(initialCount)
- 返回一个数组,我立即将其解构为变量count和setCount(这是一个函数)
- 我可以使用setCount()更新状态,从而更新count变量
有时我会看到相同的计数器示例与prevState(prevCount),但我不理解:
<button onClick={() => setCount(prevCount => prevCount -1)}>-</button>
这里发生了什么?我不理解这部分。
- 在这种情况下,我以某种方式访问了先前的计数值。
- setCount 现在需要一个函数。
- 现在异步运行 setCount。
- 这个函数是从哪里来的?
- prevCount 是从哪里来的?
- 当我运行这个时,什么被放入 prevCount 中?
你能理解我的困惑吗?我不确定我应该如何以不同的方式表达它...
非常感谢你的帮助。
setState
的文档可以更清楚地解释(在末尾处):https://reactjs.org/docs/react-component.html#setstate。如果新状态不依赖于先前状态,则没有必要传递函数。 - Felix Kling