你是否注意到——真正让用户感到“界面很丝滑”的瞬间,往往不是加载完成时,而是点击按钮后那不到半秒的反馈?interior 就是为这个关键瞬间而生的 React 动效解决方案。它不追求炫酷转场或复杂动效,而是专注打磨那些被大多数项目忽略的“最后 20%”:按钮按下的弹性、列表加载时的自然过渡、状态切换时不跳动的布局……用极简设计,解决最真实的人机信任问题。
核心功能
- 零依赖轻量集成:无需安装 npm 包,直接复制单个 TypeScript 文件到项目中即可使用,每个组件仅依赖
motion(Framer Motion 的轻量核心),无额外运行时开销 - 行为与样式彻底解耦:每个组件提供一对 API——
useX(纯逻辑 Hook,不操作任何 CSS 类名) +X(带默认样式的示例组件),换主题、改设计只需替换 class,不动一行逻辑 - 物理感精准动效:所有动画严格遵循真实物理模型(如弹簧阻尼、惯性位移),避免“凭空出现”“突兀跳动”等反直觉行为,让交互有重量、有呼吸感
- 抗干扰鲁棒设计:自动处理 Tab 切换失焦、快速连续点击、状态突变等边界场景,杜绝“拖拽卡死”“加载时列表突然上跳”等伤用户体验的细节 bug
- 面向真实开发流程:组件命名直白(
useButtonPress、useListReveal、useDragHandle),API 极简,文档即代码注释,开箱即理解,无需学习新范式 - 可预测的生命周期控制:支持手动触发、暂停、重置动画,方便与表单校验、异步请求、条件渲染等业务逻辑深度协同
适合哪些人用
如果你是React 中高级开发者,正在构建面向真实用户的商业级应用(SaaS 后台、电商前台、内容平台等),且常遇到以下情况:设计师反复强调“按钮反馈不够明显”“列表加载太生硬”“拖拽手感像在拉橡皮筋”,而你又不愿为几个动效引入庞大动画库、写一堆胶水代码——那么 interior 就是为你定制的。它不面向动画师,也不服务玩具项目,而是给重视细节、追求交付品质的工程团队,一份“开箱即专业”的微交互基础设施。
快速上手
无需 npm install!打开 GitHub components 目录,找到你需要的组件(例如 ButtonPress.tsx),复制整个文件到你的项目(如 src/lib/interior/ButtonPress.tsx)。然后在组件中这样使用:
import { useButtonPress, ButtonPress } from './lib/interior/ButtonPress';
function MyButton() {
const { pressed, bind } = useButtonPress();
return <ButtonPress pressed={pressed} {...bind}>提交</ButtonPress>;
}
想自定义样式?直接用 useButtonPress Hook,搭配你自己的 JSX 和 Tailwind/CSS Modules 类名即可,逻辑完全复用。
项目信息
micro-interactions for react, built for the half-second after a click
483
Stars
15
Forks
TypeScript
MIT
编程语言:TypeScript|GitHub Star 数:483|开源协议:MIT|GitHub 项目地址
它用最克制的方式,把“让人相信这个界面是活的”这件事,做成了可复用、可维护、可信赖的工程实践。


