【发布时间】:2022-01-09 14:38:41
【问题描述】:
在这个非常简单的演示中
import { useState } from 'react';
function App() {
const [check, setCheck] = useState(false);
console.log('App component Init');
return (
<div>
<h2>Let's get started! </h2>
<button
onClick={() => {
setCheck(true);
}}
>
ClickMe
</button>
</div>
);
}
export default App;
我得到一个登录应用程序初始化,
在第一次单击时(状态从 false 变为 true),我按预期得到另一个日志。
但是在第二次点击时我也得到了一个日志,尽管状态保持不变。(有趣的是,ReactDevTools 不会像重新渲染时那样在组件周围产生高亮效果)
对于随后的每一次点击都不会显示日志。
为什么会出现这个额外的日志。 这是一个 stackblitz 演示: https://stackblitz.com/edit/react-ts-wvaymj?file=index.tsx 提前致谢
【问题讨论】:
-
检查状态为真,我认为它始终为真。所以视图不渲染。你可以试试 setCheck(!check);
-
停止这些额外的渲染使用“useCallback”。 useCallback 将返回回调的记忆版本,只有在依赖项之一发生更改时才会更改,因此如果相同的值传递给函数,它将停止额外渲染
-
@Sanoodia
useCallback在这里完全没用,因为没有依赖组件会接收该回调作为道具。 -
我包含了一个 stackblitz 演示 stackblitz.com/edit/react-ts-wvaymj?file=index.tsx 按下按钮并查看日志我只是想看看 useState 是如何工作的而不是创建一些东西。
标签: reactjs react-hooks use-state