前端性能優(yōu)化 - React.memo 解決函數(shù)組件重復(fù)渲染
關(guān)注并將「趣談前端」設(shè)為星標(biāo)
定期推送技術(shù)干貨/優(yōu)秀開(kāi)源/技術(shù)思維
使用 React Hooks 時(shí)函數(shù)組件應(yīng)用的比較多,當(dāng)遇到組件重復(fù)渲染問(wèn)題不像類組件可以使用生命周期函數(shù) shouldComponentUpdate 或 extends React.PureComponent 解決重復(fù)渲染問(wèn)題。
使用 React.memo() 前后效果對(duì)比
例如,一個(gè)父組件 Home 中渲染了子組件 List,同時(shí) Home 組件還有一個(gè)計(jì)數(shù)器組件,每次點(diǎn)擊 count 都會(huì)加 1,遇到類似的場(chǎng)景就會(huì)出現(xiàn)子組件重復(fù)渲染問(wèn)題,這是因?yàn)?React 中當(dāng)父組件的一個(gè)狀態(tài)改變后,無(wú)論和子組件是否有關(guān),子組件都會(huì)受到影響進(jìn)行重新渲染,這也是 React 中默認(rèn)的一個(gè)行為。
函數(shù)組件中的解決方案是使用 React.memo() 函數(shù),將需要優(yōu)化的函數(shù)組件傳入即可。
import?React,?{?useEffect,?useState?}?from?"react";
//?未使用 memo:const List =?({ dataList })?=>?{
const?List?=?React.memo(({?dataList?})?=>?{
??console.log("List?渲染");
??return?(
????
??????{dataList.map((item)?=>?(
?????????{item.title}?</h2>
??????))}
????div>
??);
});
const?Home?=?()?=>?{
??const?[count,?setCount]?=?useState(0);
??const?[dataList,?setDataList]?=?useState([]);
??useEffect(()?=>?{
????const?list?=?[
??????{?title:?"React?性能優(yōu)化",?id:?1?},
??????{?title:?"Node.js?性能優(yōu)化",?id:?2?},
????];
????setDataList(list);
??},?[]);
??return?(
????
??????
評(píng)論
圖片
表情
