用React寫(xiě)函數(shù)組件,如何避免重復(fù)渲染?
?
?
這是react埋的坑,它埋的坑多的數(shù)不勝數(shù),有的時(shí)候真覺(jué)得垃圾。
React組件重建vdom取決于兩個(gè)因素 props和state。你這種情況是說(shuō),props接收不受你控制,其他人也不管性能問(wèn)題,胡寫(xiě)瞎寫(xiě)。說(shuō)來(lái)說(shuō)去,都是react官方埋的坑。
針對(duì)你上述具體問(wèn)題,你可以在你的組件外面套一個(gè)React.memo,它有第二個(gè)參數(shù),用來(lái)決定你傳入的props是否變化,具體用法看官方文檔。判斷的時(shí)候,你直接忽略onClick,因?yàn)榇蟛糠謭?chǎng)景下回調(diào)函數(shù)都不會(huì)發(fā)生變化,誰(shuí)會(huì)設(shè)計(jì)根據(jù)一個(gè)回調(diào)函數(shù)來(lái)重新渲染界面呢?除非要把函數(shù)的字符串顯示在界面上……這種場(chǎng)景沒(méi)見(jiàn)過(guò)。
基于這個(gè)想法,我們還可以基于React.memo封裝一個(gè)高階函數(shù),所有函數(shù)組件都用這個(gè)高階函數(shù)包裝。再定個(gè)規(guī)矩,所有以on開(kāi)頭的回調(diào)函數(shù)傳給組件,只接收一次,后續(xù)你換個(gè)函數(shù)給我我都不理會(huì),也不會(huì)重新觸發(fā)渲染。在高階函數(shù)里面實(shí)現(xiàn)這個(gè)邏輯。
作者:否子戈
鏈接:https://www.zhihu.com/question/442368205/answer/1711027669
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
本文摘自 :https://www.cnblogs.com/