React Spring
基于弹簧物理模型的 React 动画库,绕过 React 渲染直接改样式,支持 web、native、three 等五种渲染目标,适合正在用 React 给拖拽和展开收起加跟手反馈的前端开发者。
React Spring 是一个 React 动画库,它用弹簧物理模型代替传统的时间曲线来驱动动画。你给一个起始值和目标值,剩下的交给它,元素会像被弹簧拉着一样自然过渡,而不是按固定时长和贝塞尔曲线走。这对做拖拽、悬停、展开收起这类需要跟手反馈的交互尤其有用。
主要功能
核心是 useSpring 这类 hooks 和 animated 组件。你把样式值(数字、字符串、CSS 变量都行)交给它,它返回可以绑到元素上的动画值。它不通过 setState 逐帧更新,而是绕过 React 渲染直接改样式,所以动画跑起来不会带着组件树一起重渲染。页面里还提到可以用命令式 API 手动触发动画,适合事件响应场景。
它不止能用在 web 上。官方列出了五个目标:web、native、three、konva、zdog,分别对应网页、React Native、Three.js 3D 场景、Canvas 绘图和等距插画。每个目标可以单独安装,包体积从核心的 15.2kb 到完整版的 55.1kb 不等。
适合谁
正在用 React 做项目、需要给界面加动效的前端开发者。如果你已经试过用 CSS transition 但觉得不够灵活,或者用 React Motion 觉得过渡不够顺,这个库提供了另一种选择。它用 TypeScript 写成,对已有代码库的接入比较友好,也支持服务端渲染。
费用与限制
它是开源项目,代码托管在 GitHub 的 pmndrs 组织下,可以免费使用。官网本身是英文的,文档和示例都围绕 React 生态展开,不熟悉 React 的人需要先补课。另外,虽然它支持多个渲染目标,但每个目标的 API 和用法有差异,跨平台项目要分别看文档。