如何让 React 组件流畅动起来的完整指南:react-magic-motion 实战
【免费下载链接】react-magic-motionreact-magic-motion is a react.js library that ✨ magically animates your components.项目地址: https://gitcode.com/gh_mirrors/re/react-magic-motion
在 React 里,列表项、面板的增删往往是一下子"硬切",想要加过渡就得自己打理 framer-motion 的一整套 API,繁琐还容易出错。react-magic-motion 用几个现成的组件解决了这个问题:把现有结构包一层,内容的进场、退场和位置变化就自动带上平滑动画,不用再手写动画逻辑。
三步让列表动起来
第一步,安装:
npm i react-magic-motion第二步,导入核心组件并把目标区域包起来:
import { MagicMotion } from "react-magic-motion"; <MagicMotion> {showList && <ul>…你的列表项…</ul>} </MagicMotion>第三步,只需切换showList的状态。列表项会从 DOM 里平滑地滑入滑出,不需要你写任何额外动画代码。整个库运行时只依赖 framer-motion 一个包,其余都是替你编排好的逻辑。
四个核心组件能力速查
上手前先看这张总览表:
| 组件 | 职责 | 一句话说明 |
|---|---|---|
MagicMotion | 动画容器 | 包一层区域,子元素的出现、消失与位置变化自动带过渡 |
MagicExit | 退场动画 | 元素移除前先播一遍退场动画再卸载 |
MagicCard | 卡片展开 | 一个布尔 prop 驱动卡片从页面放大展开、再收回 |
MagicTabSelect | 标签指示器 | 让选中标签的下划线或色块在标签间平滑滑动 |
列表项进出场动画怎么做
MagicMotion是出场率最高的组件。它内部借助 framer-motion 的 LayoutGroup,自动把你的子元素转换成带布局动画的 motion 组件。你只管传入普通 JSX,增删条目时其余项的位置移动都会跟着过渡。想调整动画节奏时,直接把 framer-motion 的transition参数传进去即可。
让元素优雅地退场
默认情况下元素一旦移除就立刻消失,而MagicExit会让元素先播放退场动画(比如渐隐、收缩)再卸载。删除待办事项列表里的一项时用得上它,exit参数用来定义退场的具体样式。
能解决哪些实际问题
官方仓库自带一批演示应用,可以归成两类常见诉求:
导航与菜单类:侧边栏、上下文菜单、标签页
- 可折叠侧边栏📋:侧边栏开合时,内容区随之平滑扩缩,这正是布局动画的强项,包一层
MagicMotion就能拿到效果 - 上下文菜单:退出时用退出动画,让菜单自然淡出而不是突然消失
- 标签切换:把
MagicTabSelect用在标签指示条上,切换时指示器会在标签间滑过去,而不是瞬移
内容展示类:搜索结果、手风琴、可展开卡片
- 搜索结果🔍:关键词变化、结果重排时,条目逐一滑入滑出,用户能跟上变化过程
- 手风琴:面板展开时把下方内容平滑推开,不跳帧
- 可展开卡片🃏:
MagicCard用isCardExpanded驱动卡片从常规尺寸放大展开,自带背景遮罩,点击遮罩即可收回;记得引入配套的react-magic-motion/card.css
进阶玩法:framer-motion 的能力全部可用
整个库构建在 framer-motion 之上,并且直接转出了它的 API。也就是说你可以import { motion } from "react-magic-motion",把div换成motion.div,加上initial和animate,就能做透明度、缩放这类非布局动画,和布局动画在同一棵组件树里并存。
还有一个值得留意的细节:各组件都跟随系统"减少动态效果"的偏好设置,也可以通过disabled手动关掉动画,放进生产环境不用担心打扰用户。
这个库好在哪
- 运行时依赖只有 framer-motion,不引入额外体积
- 布局动画不用你管
layoutId和同步时序,包一层就生效 - 进场、退场、卡片展开都有现成组件,不用自己拼
- TypeScript 编写,自带类型定义,MIT 协议
获取源码与文档
想跑演示或参与贡献,可以克隆仓库:
git clone https://gitcode.com/gh_mirrors/re/react-magic-motion各组件源码位于packages/react-magic-motion/下的magic-motion、magic-card等子目录,完整文档与演示页面在apps/docs/中,建议从applications/目录下的各个场景示例看起,对照着改代码手感最直观。
接下来,打开你的项目,选一处会频繁增删内容的区域,包上一层,让界面自己动起来吧。
【免费下载链接】react-magic-motionreact-magic-motion is a react.js library that ✨ magically animates your components.项目地址: https://gitcode.com/gh_mirrors/re/react-magic-motion
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考