【发布时间】:2023-03-21 23:16:01
【问题描述】:
当我尝试来自 React Hook 的示例时,我遇到了一个关于 useState 的问题。
在下面的代码中,当单击按钮时,我为document 添加事件并检查count 的值。
我的期望是在console.log 中获得count 并以相同的方式查看。但实际上,我在console 中得到了旧值(初始值)和视图中的新值。我不明白为什么视图中的count 发生了变化,而事件回调中的count 没有变化。
还有一件事,当我使用setCount(10);(修复一个数字)时。并多次单击按钮(> 2),然后单击外部,我从checkCount 只得到了 2 条日志。是不是 React 手表 count 不改变,那么下次不要 addEventListener。
import React, { useState } from "react";
function Example() {
const [count, setCount] = useState(0);
const add = () => {
setCount(count + 1);
console.log("value set is ", count);
document.addEventListener("click", checkCount);
};
const checkCount = () => {
console.log(count);
};
return (
<div>
<p>You clicked {count} times</p>
<p>Click button first then click outside button and see console</p>
<button onClick={() => add()}>Click me</button>
</div>
);
}
export default Example;
【问题讨论】:
-
是的,React 确实会检查
count是否已更改,如果已更改,则仅重新渲染。 -
@PraveenKumarPurushothaman 我不是说工作正常,这里有一个非常严重的错误,事件内存泄漏..
-
我能问一下,你想做什么。您目前在这里有一个非常严重的内存泄漏,每次单击该按钮时,您都会向 DOM 添加另一个事件侦听器。然后,您永远不会删除此类事件。通常这样的事件可以在
useEffect钩子内附加/分离。 -
为什么要在事件点击时添加事件监听器?
标签: reactjs react-hooks