React利用React.memo和useCallback緩存彈窗組件
父組件TenantManage在每次執(zhí)行useState時(shí)會(huì)重新渲染,導(dǎo)致子組件UserForm也會(huì)觸發(fā)重新渲染,即使父組件做的操作和UserForm一點(diǎn)關(guān)系也沒有,也會(huì)觸發(fā)
解決方式:利用React.memo緩存子組件,在父組件使用緩存版本的MyUserForm
import UserForm from './userForm' //彈窗組件
function TenantManage() {
return (
<div className='userList'>
{/* 彈窗組件 */}
<MyUserForm
visiable={isOpenModal}
closeModel={closeModel}
modelTitle={modelTitle}
getUserListWrap={getUserListWrap}></MyUserForm>
<Card className='searchFlex'>
</Card>
</div>
)
}
const MyUserForm = React.memo(UserForm) //緩存版本的模態(tài)框組件
export default TenantManage但是上述還是有問題,父組件useState子組件還是會(huì)重新渲染
因?yàn)楦附M件給子組件傳遞了closeModel這個(gè)方法,和visiable、modelTitle這些屬性,雖然React.memo能將屬性緩存,但是沒辦法把函數(shù)緩存。
深入解釋:
1、React.memo會(huì)對(duì)組件的props進(jìn)行淺比較(即比較前后props的每個(gè)屬性值是否相等,對(duì)于基本類型比較值,對(duì)于引用類型比較引用地址)。
2. 對(duì)于屬性中的函數(shù),由于每次父組件渲染都會(huì)創(chuàng)建一個(gè)新的函數(shù)實(shí)例(引用改變),所以即使函數(shù)內(nèi)容相同,React.memo也會(huì)認(rèn)為該prop發(fā)生了變化,從而導(dǎo)致子組件重新渲染。
最終解決方法:使用useCallback緩存函數(shù)
// 原來的方法
// function closeModel() {
// setIsOpenModal(false)
// }
//使用useCallback緩存
const closeModel = useCallback(() => {
setIsOpenModal(false)
}, [])到此這篇關(guān)于React利用React.memo和useCallback緩存彈窗組件的文章就介紹到這了,更多相關(guān)React緩存彈窗內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- React實(shí)現(xiàn)頁面狀態(tài)緩存(keep-alive)的示例代碼
- react:swr接口緩存案例代碼
- React中使用Workbox進(jìn)行預(yù)緩存的實(shí)現(xiàn)代碼
- Reactor?WebFlux集成Redis處理緩存操作
- react實(shí)現(xiàn)組件狀態(tài)緩存的示例代碼
- React中實(shí)現(xiàn)keepalive組件緩存效果的方法詳解
- React router cache route實(shí)現(xiàn)緩存頁面流程介紹
- react+django清除瀏覽器緩存的幾種方法小結(jié)
- 探究react-native 源碼的圖片緩存問題
相關(guān)文章
React使用Echarts/Ant-design-charts的案例代碼
這篇文章主要介紹了React使用Echarts/Ant-design-charts的實(shí)例代碼,本文通過實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
React獲取組件對(duì)應(yīng)的DOM元素多種實(shí)現(xiàn)方法
本文主要介紹了React中獲取組件對(duì)應(yīng)DOM元素的多種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
React實(shí)現(xiàn)路由鑒權(quán)的實(shí)例詳解
React應(yīng)用中的路由鑒權(quán)是確保用戶僅能訪問其授權(quán)頁面的方式,用于已登錄或具有訪問特定頁面所需的權(quán)限,這篇文章就來記錄下React實(shí)現(xiàn)路由鑒權(quán)的流程,需要的朋友可以參考下2024-07-07
React?SSR架構(gòu)Stream?Rendering與Suspense?for?Data?Fetching
這篇文章主要為大家介紹了React?SSR架構(gòu)Stream?Rendering與Suspense?for?Data?Fetching解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
詳解基于React.js和Node.js的SSR實(shí)現(xiàn)方案
這篇文章主要介紹了詳解基于React.js和Node.js的SSR實(shí)現(xiàn)方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

