对应的版本
-
- "react": "^18.2.0",
- "react-activation": "^0.12.4",
- "react-dom": "^18.2.0",
- "react-router-dom": "^6.15.0",
这是一个npm包,在react keep alive中用的人数应该是最多的包.
这是GitHub地址react-activation
- yarn add react-activation
- # 或者
- npm install react-activation
- # 或者
- pnpm install react-activation
- import ReactDOM from "react-dom/client";
- import { BrowserRouter } from "react-router-dom";
- import App from "./App.tsx";
- import { AliveScope } from "react-activation";
-
- const { VITE_PROJECT_BASE } = import.meta.env;
-
- ReactDOM.createRoot(document.getElementById("root")!).render(
- <BrowserRouter basename={VITE_PROJECT_BASE}>
- <AliveScope> // 添加这个 AliveScope
- <App />
- AliveScope>
- BrowserRouter>
- );
- import { Outlet } from "react-router-dom";
- import { RoutesTypes } from "@/types/routesType";
- import { TableOutlined } from "@ant-design/icons";
- import KeepAlive from "react-activation"; // 添加这个 包裹对应的组件
- // id 是 用作 唯一标识的 name 的 是 后期 调用 react-activation 对应方法,去除,和刷新组件
-
- // 房间
- import RoomList from "@/pages/RoomManagement/RoomList/index.tsx";
-
- // 公播
- import PublicBroadcastingList from "@/pages/PublicBroadcastingManagement/PublicBroadcastingList/index.tsx";
- import DefaultPublicBroadcasting from "@/pages/PublicBroadcastingManagement/DefaultPublicBroadcasting/index.tsx";
-
- // 设备
- import DeviceList from "@/pages/DeviceManagement/DeviceList/index.tsx";
- import DeviceConfiguration from "@/pages/DeviceManagement/DeviceConfiguration/index.tsx";
-
- const routes: RoutesTypes[] = [
- {
- sort: 1,
- path: "/layout/sass-platform",
- element: <Outlet />,
- meta: {
- title: "测试平台",
- },
- children: [
- {
- path: "/layout/sass-platform/room-management",
- element: <Outlet />,
- meta: {
- title: "房间管理",
- icon: TableOutlined,
- },
- children: [
- {
- path: "/layout/sass-platform/room-management/room-list",
-
- element: (
- <KeepAlive
- id="/layout/sass-platform/room-management/room-list"
- name="/layout/sass-platform/room-management/room-list"
- >
- <RoomList />
- KeepAlive>
- ),
- meta: {
- title: "房间列表",
- icon: TableOutlined,
- },
- },
- ],
- },
- {
- path: "/layout/sass-platform/public-broadcasting-management",
- element: <Outlet />,
- meta: {
- title: "公播管理",
- icon: TableOutlined,
- },
- children: [
- {
- path: "/layout/sass-platform/public-broadcasting-management/public-broadcasting-list",
- element: (
- <KeepAlive
- id="/layout/sass-platform/public-broadcasting-management/public-broadcasting-list"
- name="/layout/sass-platform/public-broadcasting-management/public-broadcasting-list"
- >
- <PublicBroadcastingList />
- KeepAlive>
- ),
- meta: {
- title: "公播列表",
- icon: TableOutlined,
- },
- },
- {
- path: "/layout/sass-platform/public-broadcasting-management/default-public-broadcasting",
- element: (
- <KeepAlive
- id="/layout/sass-platform/public-broadcasting-management/default-public-broadcasting"
- name="/layout/sass-platform/public-broadcasting-management/default-public-broadcasting"
- >
- <DefaultPublicBroadcasting />
- KeepAlive>
- ),
- meta: {
- title: "默认公播",
- icon: TableOutlined,
- },
- },
- ],
- },
- {
- path: "/layout/sass-platform/device-management",
- element: <Outlet />,
- meta: {
- title: "设备管理",
- icon: TableOutlined,
- },
- children: [
- {
- path: "/layout/sass-platform/device-management/device-list",
- element: (
- <KeepAlive
- id="/layout/sass-platform/device-management/device-list"
- name="/layout/sass-platform/device-management/device-list"
- >
- <DeviceList />
- KeepAlive>
- ),
- meta: {
- title: "设备列表",
- icon: TableOutlined,
- },
- },
- {
- path: "/layout/sass-platform/device-management/device-configuration",
- element: (
- <KeepAlive
- id="/layout/sass-platform/device-management/device-configuration"
- name="/layout/sass-platform/device-management/device-configuration"
- >
- <DeviceConfiguration />
- KeepAlive>
- ),
- meta: {
- title: "设备配置",
- icon: TableOutlined,
- },
- },
- ],
- },
- ],
- },
- ];
-
- export default routes;
缓存的路由的不能懒加载
Outlet 放置位置
文档:https://github.com/CJY0208/react-activation/blob/master/README_CN.md
使用
withAliveScope
或useAliveController
获取控制函数
- import KeepAlive, { withAliveScope, useAliveController } from 'react-activation'
-
- //hook 函数式组件
- function app(){
- const { drop, dropScope, clear, getCachingNodes } = useAliveController()
- }
-
- //class 类组件
- @withAliveScope
- class App extends Component {
- render() {
- const { drop, dropScope, clear, getCachingNodes } = this.props
- }
- }
属性名 | 类型 | 备注 |
when | Boolean、Array、Function | Boolean (true-卸载时缓存 false-卸载时不缓存) Array (第 1 位参数表示是否需要在卸载时缓存 第 2 位参数表示是否卸载 // 例如:以下表示卸载时不缓存,并卸载掉嵌套的所有 ` Function (返回值为上述 |
saveScrollPosition | Boolean | 自动保存滚动位置(默认true) |
name | string | 缓存标识 |