React 中保存页面状态,在react中实现vue的keep-alive,React Activation

今天有个业务需求,在列表页筛选查询条件后,进入详情页,返回列表页时,筛选条件还存在。

选中了React Activation插件,使用如下:

这是参考文档:react-activation/README_CN.md at d08219cba1fd3bc2ddd18b382eac656f1826d65d · CJY0208/react-activation · GitHub

1、安装

yarn add react-activation

2、在App.js页面引入AliveScope

import { AliveScope } from "react-activation";
import React from 'react'
import Laout from './pages/Laout'
import { Switch, Redirect } from 'react-router-dom'
import RouteViews from './router/index'
import { ConfigProvider } from 'antd';
import zhCN from 'antd/lib/locale/zh_CN';
import moment from 'moment';
import 'moment/locale/zh-cn';
import { AliveScope } from "react-activation";
moment.locale('zh-cn');


function App () {
  const isLogin = sessionStorage.getItem('token') || ''
  return isLogin ? (
    <AliveScope>
      <div className="App">
        <ConfigProvider locale={zhCN}>
          <Laout>
            <Switch>
              <RouteViews />
              <Redirect to="*" />
            </Switch>
          </Laout>
        </ConfigProvider>

      </div>
    </AliveScope>

  ) : <Redirect to="/login" />
}

export default App;

 

3、在渲染路由时添加缓存KeepAlive 

import React, { Component } from 'react';
import { Redirect, Route, Switch } from "react-router-dom";
import routes from './config'
import KeepAlive from "react-activation";

export default class RouterView extends Component {
  render () {

    //let { routes } = this.props;	//取到传进来的路由表
    let routerArr = routes.filter(item => !item.redirect); //非重定向的数据过滤出来
    let redirectArr = routes.filter(item => item.redirect).map(item => <Redirect key={item.path} from={item.path} to={item.redirect} />)

    const renderRoutes = (route) => {

      return route.map(item => {
        if (item.children && item.children.length > 0) {
          return renderRoutes(item.children)
        } else {
          return item.path === "/" ? null : (<Route path={item.path} key={item.path} exact render={(props) => {
            return <KeepAlive when={item.path === '/admin/content/videomanage' ? true : false}><item.component {...props} /></KeepAlive>
          }} />)
        }
      }).concat(redirectArr)
    }


    return (
      <Switch>
        {renderRoutes(routerArr)}
      </Switch>
    )
  }
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLL_LH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值