react 使用Keep-alive 缓存页面数据

该代码段展示了在umi.js框架下如何利用useLocation、KeepAlive和SwitchTabsLayout组件来处理动态路由切换和页面缓存。通过memoizedOneLocaleRoutes处理路由数据,根据mode和location状态决定是否启用SwitchTabs模式。KeepAlive组件用于控制页面缓存,基于history.action判断页面是否需要被缓存,解决参数改变时页面不刷新的问题。
摘要由CSDN通过智能技术生成
import { useLocation, KeepAlive, history } from 'umi';
import { PageLoading, PageContainer } from '@ant-design/pro-layout';
export default function SwitchTabsLayout(props: RouteTabsLayoutProps): JSX.Element {

    // const {clear} = useAliveController()
  const { mode, loading, routes, children, ...rest } = props;
  const location = useLocation() as H.Location;
  const originalTabsRoutes = memoizedOneLocaleRoutes(routes!);
  if (mode && isSwitchTab(location as any, originalTabsRoutes)) {
    if (routes) {
      return (
        <SwitchTabs
          mode={mode}
          {...rest}
          originalRoutes={originalTabsRoutes} // animated={false}
        > 
          <PageContainer>
            <KeepAlive
              saveScrollPosition="screen" //自动保存共享屏幕容器的滚动位置
              id={history.location.search || history.location.pathname} // 根据参数去缓存,如果参数不同就缓存多份,如果参数相同就使用同一个缓存。这样解决了传参改变时,页面不刷新的问题
              when={() => {  // 根据路由的前进和后退状态去判断页面是否需要缓存,前进时缓存,后退时不缓存(卸载)。 when中的代码是在页面离开(卸载)时触发的
                return history.action != 'POP'; //true卸载时缓存,false卸载时不缓存
              }}
            >
              {children}
            </KeepAlive>
          </PageContainer>
        </SwitchTabs>
      );
    }
  }

  return children;
}
···
![在这里插入图片描述](https://img-blog.csdnimg.cn/57617e7883cd4d98a9909573b97b2888.png)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值