【发布时间】:2021-07-21 18:48:16
【问题描述】:
有人可以向我解释一下useMemo 和useCallback 的使用是贵还是便宜?我检查了 React 的源代码,我认为它们使用起来很便宜,但我也读过一些人说它们不是。
在 Next.js 上下文中使用 useCallback:
const MyComp = () => {
const router = useRouter():
const handleClick = useCallback(() => router.push('/some-path'), [router]);
return <button onClick={handleClick} />
}
这里是简单的箭头函数:
const MyComp = () => {
const router = useRouter():
return <button onClick={() => router.push('/some-path')} />
}
我是否使用useCallback 保存重新渲染?
memoize和比较依赖数组[router]的开销,是不是比较贵?
附加信息:检查 React 的代码我看到他们使用 Object.is 而不是 === 或 == 比较 deps 数组项。
有人知道为什么吗?
同时检查这个组件的渲染:
import {useCallback, useState} from "react";
let i = 0
const CallbackDemo = () => {
const [value, setValue] = useState('');
console.log('render', i++);
const handleClick = useCallback(() => setValue(Math.random()), []);
return (
<div>
<span>{value}</span>
<button onClick={handleClick}>New set</button>
</div>
);
}
export default CallbackDemo;
我看到使用或不使用 useCallback 的渲染数量相同
【问题讨论】:
标签: reactjs