假设我们使用React钩子useState
,然后将setX
存储在一个封闭的闭包中,即使从另一个地方调用setX
也会保留引用。原始的setX
仍然可以使用吗?
示例:
const [x, setX] = useState(0);
useEffect(() => {
// this timeout runs `setX` first
setTimeout(() => setX(1), 500);
}, []);
useEffect(() => {
// this `setX` will be called after a new `setX` is returned
// after the re-render caused by the first `setX`
setTimeout(() => setX(2), 1000);
}, []);
虽然捕获旧版本的x
显然会引起问题,并且有解决方法(setX(a => a + 1)
或useContext
),但此问题仅针对{{1} }及其寿命。
setX
是否有可能在每次通话中返回相同的设置器?还是总是返回一个新的?即使值更改后,所有返回的二传手都有效吗?
请注意,这不一定是关于它在当前实现中如何工作的问题,因为这是一个可以轻易检查的问题。问题是它应该如何工作,更重要的是应如何使用,以及开发人员对useState
,其生存期和使用情况有什么期望。