🔥 99%由 Trae AI 开发的 React KeepAlive 组件,竟然如此优雅!✨
温馨提示:除本文第一行提示之外,本项目的代码 99%由 Trae AI 开发,如您在使用过程中遇到任何问题,欢迎提交 Issue 或 Pull Request。
------ 项目 README
Hey 各位前端小伙伴们~ ଘ(੭ˊᵕˋ)੭ ੈ✩
今天要给大家介绍一个超级有趣的 React 组件------react-activity-keep-alive!这个项目可不简单呢,它有 99% 的代码都是由 Trae AI 生成的,是不是很厉害?~ (。♡‿♡。)
🎯 为啥要做这个组件?
用过 Vue 的小伙伴们都知道,Vue 有个超好用的 <KeepAlive> 组件,可以在路由切换时缓存页面状态。但是 React 一直缺少这样的优雅解决方案,对不对?٩(˘◡˘)۶
直到 React 19.2 引入了 Activity API,这个局面才有所改变。而我们这个项目,就是基于这个新 API 打造的 React 版 KeepAlive!
🌟 项目亮点一览
让我来给大家介绍这个项目的几大亮点吧~ (≧∇≦)/
1. 🚀 99% AI 开发,质量还这么高!
没错,你没看错!这个项目的源代码几乎全部由 Trae AI 生成。从架构设计到代码实现,从类型定义到注释文档,都是 AI 的杰作!是不是很震撼? Σ(っ °Д °;)っ
2. 📱 完整的 KeepAlive 语义支持
tsx
import { KeepAlive } from "react-activity-keep-alive";
<KeepAlive
activeKey={pathname}
include={[/^\/demo/]} // 只缓存 /demo 开头的路由
exclude={[/^\/admin/]} // 不缓存 /admin 开头的路由
max={3} // 最多缓存 3 个,LRU 策略
>
<Outlet />
</KeepAlive>;
是不是很眼熟?没错,它完美复刻了 Vue KeepAlive 的 API 设计!☆*:.。. o(≧▽≦)o .。.:*☆
3. 🎪 丰富的演示场景
项目内置了一个超棒的 playground,包含各种演示:
🌐 在线演示 :你可以直接访问 liujiayii.github.io/react-keep-... 体验所有功能!不需要本地搭建~ ✨
- LRU 缓存演示:观察缓存淘汰策略
- 生命周期演示:看看激活/失活钩子的效果
- 嵌套缓存演示:多层 KeepAlive 的复杂场景
- 状态保持演示:输入框数据、滚动位置都能完美保持
4. 🎛️ 强大的控制能力
tsx
import { useAliveController } from "react-activity-keep-alive";
function CacheController() {
const { drop, dropScope, refresh, refreshScope, clear } = useAliveController();
return (
<div>
<button onClick={() => drop("/demo/a")}>删除缓存</button>
<button onClick={() => clear()}>清空所有</button>
<button onClick={() => refresh("/demo/b")}>刷新缓存</button>
{/* 等等... */}
</div>
);
}
想要主动控制缓存?没问题!随意删除、刷新、清空,统统支持~ ( ◕‿◕ )
🔧 技术实现揭秘
现在来聊聊技术实现吧~ ✧(≖ ◡ ≖)
历史背景:致敬 react-activation
在 React 19.2 之前,社区里有一个非常优秀的库叫 react-activation!它为 React 生态带来了 KeepAlive 的概念,让无数开发者受益~ (´∀`)
react-activation 的贡献:
- ✅ 开创了 React KeepAlive 的先河,满足了无数开发者的需求
- ✅ 提供了完整的生命周期管理和状态保持功能
- ✅ 虽然使用了快照技术,但在当时的技术条件下是个很好的解决方案
- ✅ API 设计清晰,学习成本可控
由于它基于 React 18 的技术栈设计,自然无法适配 React 19.2 的新特性。但正是它的存在,让我们看到了 KeepAlive 的巨大价值!
当 React 19.2 带来了原生的 Activity API 时,我们有了更好的技术基础来重新实现这个功能~ ✨ 这就是站在巨人肩膀上的力量!٩(˘◡˘)۶
基于 React 19.2 Activity
这个组件的核心在于 React 19.2 的 Activity API:
tsx
<Activity active={isActive}>
<div style={{ display: isActive ? undefined : "none" }}>
{/* 组件内容 */}
</div>
</Activity>;
Activity 的巧妙之处在于:失活的组件不会 unmount,只会隐藏!这就为 KeepAlive 提供了技术基础~ (。◕‿◕。)
LRU 缓存策略实现
tsx
// LRU 队列:最旧在前,最新在后
const orderRef = useRef<string[]>([]);
// 淘汰超出容量的缓存
while (cache.size > max) {
const victim = orderRef.current[0];
if (!victim || victim === activeKey)
break;
orderRef.current.shift();
cacheRef.current.delete(victim);
}
LRU 算法确保最近最少使用的缓存会被优先淘汰,保持缓存的高效利用~ ଘ(੭ˊᵕˋ)੭* ੈ
作用域嵌套管理
作用域嵌套管理
项目内部实现了作用域管理机制来支持多层 <KeepAlive> 的嵌套:
tsx
// 内部实现(用户无需关心)
<AliveScopeProvider name={key}>
<AliveItemProvider active={isActive}>
{node}
</AliveItemProvider>
</AliveScopeProvider>;
这个机制让项目能够优雅地处理复杂的嵌套缓存场景,自动管理不同层级的作用域~ ヾ(≧∇≦*)ゝ
🎮 实际使用效果
让我给大家展示一下实际的使用效果吧!
假设我们有这样一个计数器页面:
tsx
function DemoPage() {
const [count, setCount] = useState(0);
return (
<div>
<h1>
计数器:
{count}
</h1>
<button onClick={() => setCount(count + 1)}>
点我增加
</button>
<p>切换路由再回来,看看数据还在不在~ (◕‿◕)</p>
</div>
);
}
当你点击按钮增加到 10,然后切换到其他页面,再回来的时候:
✨ 数据完全保持!还是 10!没有重新渲染! ✨
这就是 KeepAlive 的魅力所在~ (≧∇≦)/
🏗️ 项目结构一览
bash
react-keep-alive/
├── src/ # 核心库代码
│ ├── KeepAlive.tsx # 主组件(244 行精华代码)
│ ├── hooks.ts # 生命周期钩子
│ └── context.tsx # 作用域管理
├── playground/ # 演示应用
│ ├── src/pages/ # 各种演示页面
│ └── src/App.tsx # 主应用
└── README.md # 超详细的文档
整个项目只有 4 个主要文件,却实现了完整的 KeepAlive 功能,是不是很精简? Σ(っ °Д °;)っ
🛠️ 开发体验
开发这个项目的感觉真的很棒~ (。♡‿♡。)
- TypeScript 支持:完整的类型定义,IDE 友好
- ESLint 配置:代码质量有保障
- Husky + lint-staged:提交前自动检查
- Playground 演示:边开发边验证
最关键的是,有了 Trae AI 的加持,开发效率真的太高了!几乎所有的代码逻辑、类型定义、注释文档,都是 AI 自动生成的!
🎊 总结
这个 react-activity-keep-alive 项目真的很让人兴奋呢~ ✨
- 技术先进:基于 React 19.2 Activity,性能优秀
- API 友好:完全对齐 Vue KeepAlive,学习成本低
- 功能完整:LRU 缓存、生命周期、控制接口一应俱全
- AI 加持:99% 代码由 AI 生成,开发效率惊人
- 演示丰富:内置 playground,所见即所得
如果你的项目正在使用 React 19.2+,真的推荐试试这个组件!让你的路由切换体验更上一层楼~ ( ◕‿◕ )
🔗 相关链接
- GitHub 地址 :github.com/liujiayii/r...
- 🌐 在线演示 :liujiayii.github.io/react-keep-... - 直接浏览器体验!
- 本地演示 :启动 playground:
pnpm -C playground dev
小贴士 :项目要求 React 19.2+ 版本哦,如果你的项目还在用旧版本,建议升级一下~ ଘ(੭ˊᵕˋ)੭ ੈ✩
好啦,今天的介绍就到这里!希望这个由 Trae AI 开发的 KeepAlive 组件能给大家带来帮助~ 如果觉得有用的话,记得给项目点个 Star 哦!☆*:.。. o(≧▽≦)o .。.:*☆
(◕‿◕)ノbye bye~