[英]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.