【发布时间】:2021-09-06 14:05:59
【问题描述】:
这是关于 React.js 中 useMemo 钩子的常见解释
useMemo(compute, dependencies) invokes compute, memoizes the calculation result, and returns it to the component.
If during next renderings the dependencies don’t change, then useMemo() doesn’t invoke compute but returns the memoized value.
- Dmitri Pavlutin
但是,我看到了 useMemo 钩子的示例,它返回如下所示的数组。
React.useMemo(() => [1, 2, 3], []);
如您所见,useMemo 返回一个数组,该数组在 Javascript 中被视为对象。
这令人困惑。我认为 useMemo 钩子的用法是用于记忆计算值。
所以我做了一个小测试来弄清楚 useMemo with object 是如何工作的
const Child = React.memo(({ obj }) => {
console.log('this is child component')
return <div>Child Component</div>
})
const App = () => {
const [toggle, setToggle] = React.useState(false)
const memoObj = React.useMemo(() => { return { bar: 'foo' } }, [])
return (
<div>
<button onClick={() => setToggle(!toggle)}>test</button>
<Child obj={memoObj} />
</div>
);
}
当 memoObj 没有被 useMemo 包装时,每当我点击 test 按钮时,我都可以在控制台中看到来自 Child 组件的消息。
另一方面,当 memoObj 被钩子包裹时,消息仅在 Child 组件第一次渲染时显示。
是不是说useMemo不仅可以memoize计算值,还可以memoize对象的引用?
【问题讨论】:
标签: reactjs react-hooks