React useMemo鉤子函數傳參失效了怎么辦?

React useMemo鉤子函數傳參失效了怎么辦?

React useMemo鉤子函數傳參失效詳解及解決方案

在React開發中,useMemo 鉤子函數是性能優化的利器,它可以緩存計算結果,避免不必要的重復計算。然而,在使用過程中,開發者可能會遇到傳參失效的問題。本文將分析一個典型案例,并提供有效的解決方案。

案例分析:參數遮蔽導致useMemo傳參失效

以下代碼片段展示了一個常見的useMemo傳參失效場景:

const oncellchange = useMemo((value, type, idx) => {     console.log("77777", sortrulelist);  // sortrulelist在此處有值     const tmpfunc = (value, type, idx, sortrulelist) => {         console.log("99999", sortrulelist); // sortrulelist在此處為空         const arr = sortrulelist;         // ...后續代碼     }     return tmpfunc; }, [sortrulelist]);

問題根源在于tmpfunc函數的參數sortrulelist與外部作用域的sortrulelist變量同名,造成了參數遮蔽。內部函數的sortrulelist參數接收的是一個新的、空值,而不是外部作用域中已賦值的sortrulelist變量。因此,console.log(“99999”, sortrulelist)打印結果為空。

解決方案:避免參數名沖突

為了解決參數遮蔽問題,只需修改tmpfunc函數的參數列表,移除冗余的sortrulelist參數:

const onCellChange = useMemo((value, type, idx) => {     console.log("77777", sortRuleList);     const tmpFunc = (value, type, idx) => {         console.log("99999", sortRuleList); // 現在可以正確訪問外部作用域的sortRuleList         const arr = sortRuleList;         // ...后續代碼     }     return tmpFunc; }, [sortRuleList]);

通過移除tmpfunc函數中多余的sortrulelist參數,內部函數可以直接訪問外部作用域中已定義的sortRuleList變量,從而避免參數遮蔽,確保useMemo鉤子函數能夠正確地使用外部變量。 注意,我們也建議使用更具描述性的變量名,例如將sortrulelist改為sortRuleList,提高代碼可讀性

通過以上修改,useMemo鉤子函數就能正確地使用外部變量,避免傳參失效的問題,提升代碼的可靠性和可維護性。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享