最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React模擬實(shí)現(xiàn)Vue的keepAlive功能

 更新時(shí)間:2024年10月28日 09:13:17   作者:墨墨博客  
Vue中,keep-alive組件可以緩存組件狀態(tài),在路由切換時(shí)重新掛載,實(shí)現(xiàn)這一功能在React中并不簡(jiǎn)單,但我們可以借助一個(gè)第三方庫(kù)——react-activation 來(lái)模擬Vue的keep-alive功能,需要的朋友可以參考下

前言

在React中,默認(rèn)情況下組件在被卸載后會(huì)銷毀狀態(tài),這與Vue的keep-alive功能不同。在Vue中,keep-alive組件可以緩存組件狀態(tài),在路由切換時(shí)重新掛載。實(shí)現(xiàn)這一功能在React中并不簡(jiǎn)單,但我們可以借助一個(gè)第三方庫(kù)——react-activation 來(lái)模擬Vue的keep-alive功能。

react-activation簡(jiǎn)介

可以看看github介紹:react-activation

react-activation 是一個(gè)用于React的狀態(tài)保持庫(kù),可以緩存組件的狀態(tài)和DOM,適用于多頁(yè)面應(yīng)用的路由緩存等場(chǎng)景。它的核心功能包括:

  • 緩存組件:在不卸載組件的情況下保存其狀態(tài)和DOM。
  • 恢復(fù)組件:當(dāng)組件重新激活時(shí),可以保留之前的狀態(tài)和DOM,而無(wú)需重新渲染。
  • 緩存控制:可以通過(guò)配置選項(xiàng)控制哪些組件需要緩存,哪些不需要。

react-activation安裝

yarn add react-activation
# 或者
npm install react-activation

兼容性

  • React v16 / v17 / v18

  • Preact v10+

  • 兼容 SSR

注意?。?!

  • 不要使用 <React.StrictMode /> 嚴(yán)格模式
  • (React v18+) 不要使用 ReactDOMClient.createRoot, 而是使用 ReactDOM.render

項(xiàng)目里代碼實(shí)現(xiàn)

入口文件main.tsx

在不會(huì)被銷毀的位置放置 外層,一般為應(yīng)用入口處

import { render } from 'react-dom';
import { AliveScope } from 'react-activation';
render(
  <AliveScope>
    <Router>
      <App />
    </Router>
  </AliveScope>,
  document.getElementById('root')
);

路由文件 router.tsx

export const routes = [
  {
    path: '/',
    element: <Home />,
    keepAlive: true
  },
  {
    path: '/home',
    element: <Home />,
    keepAlive: true
  },
  {
    path: '/xxx',
    element: <Index2 />
  },
]

App.tsx文件

這里可以根據(jù)router.tsx的配置看是否需要緩存, 引入KeepAlive組件,設(shè)置cacheKey來(lái)避免沖突

function App() {
const location = useLocation();
const route = useRoutes(
    routes.map(item => ({
      ...item,
      element: item.keepAlive ? (
        <KeepAlive cacheKey={item.path}>{item.element}</KeepAlive>
      ) : (
        item.element
      )
    }))
  );
  // 這里根據(jù)是否為首頁(yè)設(shè)置z-50是因?yàn)樵谑醉?yè)有多個(gè)Popup,緩存了首頁(yè)后點(diǎn)擊Popup的里面內(nèi)容跳轉(zhuǎn)別的頁(yè)面,這個(gè)Popup因?yàn)閷蛹?jí)很高,并且和root是同級(jí)節(jié)點(diǎn)所以會(huì)一直存在,所以給這些Popup也要設(shè)置層級(jí)z-10,這樣在跳轉(zhuǎn)至別的頁(yè)面時(shí),這些Popup的層級(jí)10沒(méi)有50高就不會(huì)出現(xiàn)
return (
	<div
         className={`w-full h-screen flex justify-center  bg-primary  relative ${
           location.pathname === '/home' || location.pathname === '/'
             ? ''
             : 'z-50'
         }`}
       >
        <div className="w-[393px] h-screen">
        {route}
        </div>
    </div>
	)
}

總結(jié)

react-activation 是一個(gè)非常實(shí)用的庫(kù),能夠幫助我們?cè)赗eact中實(shí)現(xiàn)類似于Vue keep-alive的緩存功能。在單頁(yè)面應(yīng)用中,合理地使用KeepAlive來(lái)緩存組件,可以顯著提升用戶體驗(yàn),減少重復(fù)渲染帶來(lái)的性能消耗。 引入KeepAlive組件,設(shè)置cacheKey來(lái)避免沖突,是最重要的!

以上就是React模擬實(shí)現(xiàn)Vue的keepAlive功能的詳細(xì)內(nèi)容,更多關(guān)于React keepAlive功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React Context跨層級(jí)通信的利器

    React Context跨層級(jí)通信的利器

    本文主要介紹了React Context跨層級(jí)通信的利器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05
  • React反向代理及樣式獨(dú)立詳解

    React反向代理及樣式獨(dú)立詳解

    這篇文章主要介紹了React反向代理及樣式獨(dú)立詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • React實(shí)現(xiàn)導(dǎo)出excel文件的操作步驟

    React實(shí)現(xiàn)導(dǎo)出excel文件的操作步驟

    在React項(xiàng)目的TypeScript文件中,因?yàn)樵腏avaScript或TypeScript并沒(méi)有提供直接的Excel導(dǎo)出功能,常用的Excel導(dǎo)出方法通常涉及使用第三方庫(kù),本文介紹了React實(shí)現(xiàn)導(dǎo)出excel文件的操作步驟,需要的朋友可以參考下
    2024-12-12
  • react-router-dom簡(jiǎn)介(推薦)

    react-router-dom簡(jiǎn)介(推薦)

    react-router包含三種類型的組件:路由組件、路由匹配組件?、導(dǎo)航組件,在你使用這些組件的時(shí)候,都必須先從react-router-dom引入,這篇文章主要介紹了react-router-dom簡(jiǎn)介,需要的朋友可以參考下
    2022-12-12
  • React實(shí)現(xiàn)評(píng)論的添加和刪除

    React實(shí)現(xiàn)評(píng)論的添加和刪除

    這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)評(píng)論的添加和刪除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • React Hook Form 概述及使用詳解

    React Hook Form 概述及使用詳解

    React Hook Form是一個(gè)輕量、高性能、無(wú)依賴的表單庫(kù),它通過(guò) React Hooks 提供簡(jiǎn)單直觀的 API 來(lái)處理表單狀態(tài)和驗(yàn)證,本文將詳細(xì)介紹 React Hook Form 的功能、使用方法及其最佳實(shí)踐,感興趣的朋友一起看看吧
    2025-05-05
  • React操作真實(shí)DOM實(shí)現(xiàn)動(dòng)態(tài)吸底部的示例

    React操作真實(shí)DOM實(shí)現(xiàn)動(dòng)態(tài)吸底部的示例

    本篇文章主要介紹了React操作真實(shí)DOM實(shí)現(xiàn)動(dòng)態(tài)吸底部的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • React中的生命周期和子組件

    React中的生命周期和子組件

    這篇文章主要介紹了React中的生命周期和子組件,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • React中的JSX??{?}的使用詳解

    React中的JSX??{?}的使用詳解

    這篇文章主要介紹了React中的JSX{?}的使用,React使用JSX來(lái)替代常規(guī)的JavaScript,JSX可以理解為的JavaScript語(yǔ)法擴(kuò)展,它里面的標(biāo)簽申明要符合XML規(guī)范要求,對(duì)React?JSX使用感興趣的朋友一起看看吧
    2022-08-08
  • 編寫React組件項(xiàng)目實(shí)踐分析

    編寫React組件項(xiàng)目實(shí)踐分析

    本文通過(guò)實(shí)例給大家分享了編寫React組件項(xiàng)目實(shí)踐的全過(guò)程,對(duì)此有興趣的朋友可以參考下。
    2018-03-03

最新評(píng)論

石屏县| 巴中市| 马鞍山市| 泽库县| 浦城县| 清镇市| 吉林市| 新营市| 皮山县| 牙克石市| 平江县| 武清区| 尉犁县| 岢岚县| 平武县| 咸阳市| 五家渠市| 交口县| 呼和浩特市| 朝阳县| 揭东县| 旺苍县| 旌德县| 呼图壁县| 荃湾区| 临桂县| 崇礼县| 隆子县| 青神县| 尚义县| 科尔| 兰西县| 新民市| 凤山市| 常熟市| 红河县| 辽宁省| 宁津县| 杭锦后旗| 越西县| 平谷区|