哐呱哩 · 开源
做得小,响得亮。
面向 React 和 React Native 的开源状态管理与动效工具。三个专注的包,从第一次 import 起就能用,需要多少再扩展多少。
- 3 个包
- React · React Native
- 自带 TypeScript 类型声明
- ISC 许可证
restate()useDraft.set()shallowpersistedRestate()useRestateScope()useAnimatedValuetiming()spring()interpolate()Animated.KeepAnimated.SceneMotionNumberMotionHighlightMotionListMotionSwapMotionSheetProgressRingrestate()useDraft.set()shallowpersistedRestate()useRestateScope()useAnimatedValuetiming()spring()interpolate()Animated.KeepAnimated.SceneMotionNumberMotionHighlightMotionListMotionSwapMotionSheetProgressRing

状态管理·React + React Native
01
一个 Hook 就能共享,何时保存由你决定。
无需 Provider、action 或 reducer,组件就能读取同一个值。只有选取的部分变化时才会重新渲染,保存和恢复只在你指定的时刻发生。
- 无需 Provider 即可共享
- 只订阅你选取的部分
- 显式保存到 IndexedDB 或 MMKV
安装npm install @kkwaenggwari/restate
实时
两个组件,一个 store
点击任意一侧的按钮。两个面板读取同一个 restate() 值并一起变化;运费徽标只监听一个选取结果。
02
一个值,指挥整个屏幕。
在 React DOM 上使用你在 React Native Animated 中熟悉的 timing、spring 和 interpolate。一个值驱动众多元素的样式,且不会每帧触发 React 渲染。
- 你熟悉的 React Native Animated API
- 被打断时保留位置和速度
- 所有者消失时自动清理
安装npm install @kkwaenggwari/animated
实时
一个 Value,十二个形状
滑块只改变一个 Value,十二个形状的位置、旋转、大小和圆角全部由它推导。按一下弹簧,再在动画进行中抓住滑块试试。

成品组件·React · React Native
03
难做的交互,已经替你做好。
滚动的数字、会移动的高亮、只有变化项才会动的列表、底部面板和滑动操作。只需传入数据,无需 Provider 或初始化调用,React 和 React Native 都能用。
- 数字、标签页、列表和面板
- Web 和原生使用同一个 import
- 新输入会从屏幕上的当前状态继续
安装npm install @kkwaenggwari/animated-chorus @kkwaenggwari/animated
实时
只需要数据的仪表盘
选择一个时间段:MotionHighlight 移动过去,MotionNumber 滚动,ProgressRing 填满,MotionList 只移动发生变化的行。
02 · 合奏
敲一下,全都动起来。
这个舞台是用 Animated 构建的。一个保存滚动进度的 Value,同时指挥 48 个形状的位置、旋转、缩放和透明度。
- 01
- 02
- 03
- 04
progress
从一个 import 开始
一开始不需要包裹的 Provider 或全局配置。应用需要什么功能时再加什么。
只更新需要的部分
只有选取结果变化的组件、使用某个值的元素,以及发生移动的行会被更新。
负责到底
被打断的动效会从屏幕上的当前状态继续;所有者消失时,订阅和动画都会被释放。
类型完备,文档齐全
每个包都自带 TypeScript 类型声明,文档提供 39 种语言。