【发布时间】:2022-01-11 10:09:52
【问题描述】:
感觉有点笨,我已经使用 React 2 年了,一直认为你必须使用 setState 和对象的新副本以避免改变状态。但是,此示例更改了状态并使用 setState 和相同的对象引用,没有任何问题。
为什么会这样?
const { useState } = React;
const Counter = () => {
const [countObject, setCountObject] = useState({count: 0});
const onClick = () => {
countObject.count = countObject.count + 1;
setCountObject(countObject); // mutated object, same reference
}
return (
<div>
<p>You clicked {countObject.count} times</p>
<button onClick={onClick}>
Click me
</button>
</div>
)
}
ReactDOM.render(<Counter />, document.getElementById('app'))
【问题讨论】:
-
有趣的是,我无法在 Stack sn-ps(堆栈溢出的 sn-p 编辑器)中重现此行为。我猜 codepen 出了点问题?
-
实际上,这是您的反应版本的问题:检查您在 codepen 中使用的
umd链接,它们是 alpha 版本(16.7.0-alpha.2),可能是一些错误在那里面。尝试使用17.0.2而不是16.7.0-alpha.2 -
谢谢@NickParsons,这就是问题所在! :) forked codepen,没注意到原作者用的是alpha版本。
-
@gfels 太好了 :) 很高兴现在解决了
标签: javascript reactjs react-hooks