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

React router cache route實(shí)現(xiàn)緩存頁面流程介紹

 更新時(shí)間:2023年01月10日 14:02:34   作者:山鬼taro  
react-router自身沒有路由緩存的特性,在5.x版本之前,我們可以基于react-router-cache-route來實(shí)現(xiàn)路由緩存功能。但是react-router 6.x在實(shí)現(xiàn)上做了比較大的變化,react-router-cache-route沒有提供相應(yīng)的支持

一、背景

在開發(fā)中,從A頁面跳轉(zhuǎn)到other頁面,再返回A頁面時(shí)react-router會(huì)直接刷新頁面,導(dǎo)致A頁面中已加載的海量數(shù)據(jù)狀態(tài)丟失,需要重新加載,用戶體驗(yàn)不佳,所以必須將海量數(shù)據(jù)狀態(tài)進(jìn)行緩存。

(在小編的實(shí)際場景中,A頁面是一堆模型&業(yè)務(wù)數(shù)據(jù)標(biāo)注點(diǎn),由于模型永遠(yuǎn)不會(huì)更改,但是加載又很緩慢,因此,希望從other頁面返回A頁面時(shí),模型不會(huì)重新加載,但是需要更新業(yè)務(wù)數(shù)據(jù)。)

(其他應(yīng)用場景舉例:開發(fā)中有從詳情頁返回列表頁的需求,這樣一來頁面返回后使用react-router會(huì)直接刷新頁面,導(dǎo)致頁面中的分頁和搜索條件全部丟失,用戶體驗(yàn)不佳,所以就必須將列表頁的狀態(tài)進(jìn)行緩存。)

二、參考方法

網(wǎng)上搜索大概有幾種方法:

1、使用localStorage/sessionStorage進(jìn)行頁面的狀態(tài)的保存,跳轉(zhuǎn)頁面后再進(jìn)行獲取,這種方法雖然可行,但是從根本來說還是從新向后臺(tái)再一次請求了數(shù)據(jù),不算最佳方案。

2、react-activation,嘗試未果

3、react-kepper,需要將項(xiàng)目的react-router替換掉,風(fēng)險(xiǎn)較大,慎用

4、react-router-cache-route,簡單易用,最佳方案

三、react-router-cache-route的使用

就是把Switch替換成CacheSwitch,因?yàn)橐驗(yàn)镾witch組件只保留第一個(gè)匹配狀態(tài)的路由,卸載掉其他路由

把Route替換成CacheRoute

注意:other面回退A頁面時(shí)使用this.props.history.push(‘’路徑’)可以實(shí)現(xiàn)頁面的緩存

但當(dāng)使用this.props.history.go(-1)則緩存失敗

四、具體步驟

1、替換Switch和Route

靜態(tài)路由

import React,{Component} from 'react'
import { Route} from 'react-router-dom'
import {CacheRoute,CacheSwitch} from 'react-router-cache-route'
import PageA from './demo/PageA.js'
import PageB from './demo/PageB.js'
import PageOther from './demo/PageOther.js'
class App extends Component{
    render(){
        return(
            <div className='App'>
                    <CacheSwitch>                   
                        <CacheRoute exact path='/platform/PageA' component={PageA}/>                    
                        <Route path='/platform/PageB' component={PageB}/>
                        <Route path='/platform/PageOther' component={PageOther}/>                       
                    </CacheSwitch>
            </div>
        )
    }
}
export default App;

動(dòng)態(tài)路由

function AppRouter() {
    return (
        <Router history={history}>
            <AppContainer>
                <CustomHeader />
                <CacheSwitch>
                    {routes.map((route: RouteType, index: number) => {
                        return route.cache ? (
                            <CacheRoute
                                exact={true}
                                path={`/${route.routerPath}`}
                                key={index}
                                component={route.component}
                            />
                        ) : (
                            <Route
                                // strict={true}
                                exact={true}
                                path={`/${route.routerPath}`}
                                key={index}
                                component={route.component}
                            />
                        );
                    })}
                    <Redirect to="/login" />
                </CacheSwitch>
            </AppContainer>
        </Router>
    );
}

動(dòng)態(tài)理由,加判斷標(biāo)志位:cache,只有傳遞了cache頁面才能被緩存,沒有傳遞cache,就用普通路由形式

{
    path: '/PageA',
    component: PageA,
    cache:true,//判斷標(biāo)志位
},
{
    path: '/PageB',
    component: PageB,
},

2、如何更新其他想要更新的業(yè)務(wù)數(shù)據(jù)

//緩存A頁面跳轉(zhuǎn)至other頁面()
componentDidCache = () => {
    console.log('List cached')
}
//緩存恢復(fù)(從other頁面跳轉(zhuǎn)返回A頁面)
componentDidRecover = () => {
    // 這里可以更新業(yè)務(wù)數(shù)據(jù)
    console.log('List recovered')
}

3、參考

https://github.com/CJY0208/react-router-cache-route/blob/HEAD/README_CN.md

到此這篇關(guān)于React router cache route實(shí)現(xiàn)緩存頁面流程介紹的文章就介紹到這了,更多相關(guān)React router cache route內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React Native中Mobx的使用方法詳解

    React Native中Mobx的使用方法詳解

    這篇文章主要給大家介紹了關(guān)于React Native中Mobx的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • React實(shí)現(xiàn)簡單登錄的項(xiàng)目實(shí)踐

    React實(shí)現(xiàn)簡單登錄的項(xiàng)目實(shí)踐

    登錄、注冊、找回密碼是前端項(xiàng)目經(jīng)常遇到的需求,本文主要介紹了React實(shí)現(xiàn)簡單登錄的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • React項(xiàng)目中decorators裝飾器報(bào)錯(cuò)問題解決方案

    React項(xiàng)目中decorators裝飾器報(bào)錯(cuò)問題解決方案

    這篇文章主要介紹了React項(xiàng)目中decorators裝飾器報(bào)錯(cuò),本文給大家分享問題所在原因及解決方案,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • React引入antd-mobile+postcss搭建移動(dòng)端

    React引入antd-mobile+postcss搭建移動(dòng)端

    本文給大家分享React引入antd-mobile+postcss搭建移動(dòng)端的詳細(xì)流程,文末給大家分享我的一些經(jīng)驗(yàn)記錄使用antd-mobile時(shí)發(fā)現(xiàn)我之前配置的postcss失效了,防止大家踩坑,特此把解決方案分享到腳本之家平臺(tái),需要的朋友參考下吧
    2021-06-06
  • React事件處理和表單的綁定詳解

    React事件處理和表單的綁定詳解

    這篇文章主要介紹了React事件處理和表單的綁定,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解使用webpack+electron+reactJs開發(fā)windows桌面應(yīng)用

    詳解使用webpack+electron+reactJs開發(fā)windows桌面應(yīng)用

    這篇文章主要介紹了詳解使用webpack+electron+reactJs開發(fā)windows桌面應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • React 非父子組件傳參的實(shí)例代碼

    React 非父子組件傳參的實(shí)例代碼

    React 主要用于構(gòu)建UI,很多人認(rèn)為 React 是 MVC 中的 V(視圖)。本文給大家介紹React 非父子組件傳參的相關(guān)知識(shí),感興趣的朋友跟隨一起看看吧
    2021-04-04
  • React組件設(shè)計(jì)模式之組合組件應(yīng)用實(shí)例分析

    React組件設(shè)計(jì)模式之組合組件應(yīng)用實(shí)例分析

    這篇文章主要介紹了React組件設(shè)計(jì)模式之組合組件,結(jié)合實(shí)例形式分析了React組件設(shè)計(jì)模式中組合組件相關(guān)概念、原理、應(yīng)用場景與操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • react使用mobx封裝管理用戶登錄的store示例詳解

    react使用mobx封裝管理用戶登錄的store示例詳解

    這篇文章主要介紹了react基于mobx封裝管理用戶登錄的store,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 詳解React native全局變量的使用(跨組件的通信)

    詳解React native全局變量的使用(跨組件的通信)

    本篇文章主要介紹了詳解React native全局變量的使用(跨組件的通信),具有一定的參考價(jià)值,有興趣的同學(xué)可以了解一下
    2017-09-09

最新評論

祁东县| 锡林郭勒盟| 昌图县| 晋州市| 康马县| 台州市| 麻江县| 伽师县| 乌拉特前旗| 封开县| 凌云县| 大理市| 察哈| 新竹县| 辉南县| 芮城县| 霸州市| 昆山市| 沭阳县| 正蓝旗| 英德市| 额济纳旗| 广南县| 福鼎市| 沁源县| 甘泉县| 德兴市| 桃园县| 宣城市| 曲水县| 鹤岗市| 来宾市| 新野县| 积石山| 南城县| 黑水县| 宁晋县| 云和县| 镇远县| 南丹县| 东安县|