[英]React useMemo and useCallback
我对useMemo和useCallback的用法存疑
const componentName = () => {
...
const renderItems = () => elements.map(elem => <div> {elem.name} </div>
...
return (
<div>
{renderItems()}
</div>
);
}
第一个是:我应该在函数 renderItems 中使用钩子 useCallback 吗?
另一个问题是我有一个导出常量的外部文件:
export const labels = ["label1", "label2", "label3"];
我应该在与组件位于不同文件中的变量标签上使用钩子 useMemo 吗?
谢谢!
useCallback
因为不需要使它本身成为一个函数。 更简洁的写法应该是:return (
<div>
{elements.map(elem => <div> {elem.name} </div>}
</div>
);
但无论如何: useMemo
首先用于值, useCallback
用于函数定义。 在上面的代码中使用useCallback
只是节省了函数定义的执行时间。 该功能仍将运行。 如果你想记忆,你可以记忆输出,这样函数只运行一次,如下所示:
const renderedJSX = useMemo(() =>
{
const val = elements.map(elem => <div> {elem.name}</div>);
return val;
},[elements]);
然后将它与您的 return 语句一起使用:
return (
<div>
{renderedJSX}
</div>
);
这样你最好创建一个将elements
作为道具的新组件并开始使用React.memo
。
无论您使用哪一个( useCallback
或useMemo
),您都必须使用elements
作为依赖项。 一旦元素更改,您的代码将重新运行。 elements
是一个数组,因此它会在每次渲染时发生变化。
memoize
如果你想使用useMemo
但这对于这样一个简单的变量来说就太过分了。 即使在单独的文件中声明,代码在解析时也只会运行一次,因此您不必担心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.