【发布时间】:2021-05-13 12:58:00
【问题描述】:
我需要更改复选框的选中状态,但 useCallback 会多次重新渲染组件。我不明白它是如何工作的。我已经阅读了很多关于它的资料。
const AppealsList = () => {
const [isFiltered, setFiltered] = React.useState(false);
console.log('rerender');
const changeCheckBox = useCallback(() => {
setFiltered(!isFiltered);
}, [isFiltered]);
return (
<div className={classNames('appeals')}>
<div className={classNames('appeals__filter')}>
<input
checked={isFiltered}
className={classNames('appeals__input')}
type="checkbox"
readOnly={true}
/>
<label
onClick={changeCheckBox}
className={classNames('appeals__filter-label')} />
</div>
</div>
);
};
重新渲染的数量:
【问题讨论】:
-
到目前为止,您对它有什么了解?
-
为什么要重新渲染?我认为我没有正确使用回调。我想知道在这种情况下如何使用它们。
-
Why it's rerendering?大概是因为你点击了标签。要获得 15 次渲染,我希望您进行了 14 次点击(严格模式下为 13 次)。useCallback不会在组件状态发生变化时停止渲染。在某些情况下,useCallback 可能会让 child 组件跳过渲染,尽管您的代码中没有使用它。 -
渲染不同于输出 HTML 中的某些变化。这是 react 效率的一部分,渲染组件与更新 DOM 的缓慢操作分开。对组件状态或道具的任何更改,或者由于父级或页面上的多个组件发生更改而重新安装组件,都会导致渲染执行。
-
还要注意,在开发模式下,如果你使用严格模式,组件会渲染两次stackoverflow.com/questions/61254372/…
标签: reactjs usecallback