react react-activation keep-alive 实现路由跳转返回保留组件状态

react react-activation keep-alive 实现路由跳转返回保留组件状态

react-activation官方文档

1.react-activation安装

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

2.在入口文件引入并使用 AliveScope 包裹

// index.js

import React from 'react'
import ReactDOM from 'react-dom'
import { AliveScope } from 'react-activation'

import App from './App'

ReactDOM.render(
  <AliveScope>
    <App />
  </AliveScope>,
  document.getElementById('root')
)

3.在路由文件中用KeepAlive 包裹需要保持状态的组件

// router.js
import KeepAlive from 'react-activation'

const routes = [
	{
		path: '/',
		redirect: '/login',
	},
	{
		path: '/list',
		element: <List/>,
		title: '列表页面'
	},
	{
		path: '/detail',
		// keepAlive 设置id, 默认会使用同一份缓存,实现多份需要增加id属性来区分
		element: <KeepAlive id="Detail"><Detail/></KeepAlive>,
		title: '详情页面'
	},
	{
		path: '/login',
		element: <Login/>,
		title: '登录页面'
	},
]

export default routes

4.注意事项

通过 KeepAlive 包括后,会新增dom,如对布局高度有影响,需要设置对应css高度

.ka-wrapper,
.ka-content {
  height: 100%;
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
React 中,你可以使用 `React-Router` 来实现列表跳详情页,并且通过 `React-Keep-Alive` 来保持跳之前的列表状态。下面是一种实现方式: 1. 首先,确保你已经安装了 `react-router-dom` 和 `react-keep-alive` 包。 2. 在你的应用程序的根组件中,导入 `BrowserRouter` 和 `KeepAliveProvider` 组件,并将其包裹在应用程序的最外层。这样可以确保路由和 Keep Alive 功能在整个应用程序中都可用。 ```jsx import { BrowserRouter } from 'react-router-dom'; import { KeepAliveProvider } from 'react-keep-alive'; function App() { return ( <BrowserRouter> <KeepAliveProvider> {/* 应用程序的其余部分 */} </KeepAliveProvider> </BrowserRouter> ); } export default App; ``` 3. 创建一个列表组件,例如 `ListPage` 组件,用于展示列表项和处理跳到详情页的逻辑。在 `ListPage` 组件中,使用 `react-router-dom` 的 `Link` 组件实现。 ```jsx import { Link } from 'react-router-dom'; function ListPage() { return ( <div> {/* 列表项 */} <Link to="/details/1">详情页 1</Link> <Link to="/details/2">详情页 2</Link> {/* 更多列表项 */} </div> ); } export default ListPage; ``` 4. 创建详情页组件,例如 `DetailsPage` 组件,用于展示单个列表项的详情。在 `DetailsPage` 组件中,你可以使用 `KeepAlive` 组件将其包裹起来,以保持状态。 ```jsx import { useParams } from 'react-router-dom'; import { KeepAlive } from 'react-keep-alive'; function DetailsPage() { const { id } = useParams(); return ( <KeepAlive name={`details-${id}`}> {/* 详情页内容 */} </KeepAlive> ); } export default DetailsPage; ``` 5. 在你的应用程序的路由配置中,确保将 `ListPage` 和 `DetailsPage` 组件与对应的路由路径关联起来。 ```jsx import { Switch, Route } from 'react-router-dom'; function App() { return ( <BrowserRouter> <KeepAliveProvider> <Switch> <Route exact path="/" component={ListPage} /> <Route path="/details/:id" component={DetailsPage} /> </Switch> </KeepAliveProvider> </BrowserRouter> ); } export default App; ``` 这样,当你从列表页跳到详情页时,详情页的状态将会被保持,并且返回列表页时会恢复到之前的状态。请注意,详情页组件需要使用 `KeepAlive` 组件进行包裹,以便实现状态保持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值