0Pricing
React Academy · 课时

React Spring 基础:useSpring 钩子

使用 useSpring 制作值动画,配置张力、摩擦力和质量,让运动更自然

React Spring 基础:useSpring 钩子 是 CoddyKit 上的免费 React Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

弹簧物理与基于时长的动画

传统 CSS 动画使用固定时长:动画播放 X 毫秒后停止。react-spring 使用弹簧物理学来为值制作动画——动画由张力(弹簧的刚度)和摩擦力(弹簧对运动的阻力)驱动。这会产生自然减速、具有有机感的移动效果。

useSpring 基本用法

useSpring({ from, to }) 钩子用于定义动画值。您可以在 from 中指定起始值,在 to 中指定目标值。useSpring 会返回一个 springs 对象,其中每个键都是一个 SpringValue,即对应数字值或颜色值的动画版本。

弹簧配置:张力和摩擦力

config 选项用于控制弹簧行为。张力(默认值为 170)控制刚度——值越高,回弹到位的速度越快。摩擦力(默认值为 26)控制阻尼——值越低,弹跳越明显。质量(默认值为 1)会增加惯性。这三个值共同决定了动画的特性。

预设配置

react-spring 提供了无需调节即可使用的预设配置:config.default 均衡且适用于一般场景,config.gentle 缓慢而平滑,config.wobbly 使用较低摩擦力产生弹跳,config.stiff 快速而利落,config.slow 则非常渐进。请从 react-spring 导入这些配置。

SpringValue 对象

useSpring 返回的值是 SpringValue 对象,而不是普通数字。您不能直接在 JSX 中渲染它们,也不能在普通样式对象中使用它们。必须将它们应用到 animated.* 组件,因为这些组件知道如何订阅弹簧更新,并高效地将更新应用到 DOM。

立即执行:跳过动画

将 immediate: true 传给 useSpring 后,这些值会立即跳到目标值,从而跳过弹簧动画。这在初始渲染时、用户在 OS 设置中启用了“减少动态效果”时,或您需要以编程方式重置位置且不产生任何视觉移动时非常有用。

反转弹簧动画

您可以通过切换哪些值位于 from 和 to 中来反转弹簧动画。常见做法是保存一个布尔切换状态,并根据它计算 from/to:当切换状态为 false 时,从 0 动画到 1;为 true 时,则从 1 动画到 0。react-spring 会在这些状态之间平滑过渡。

命令式接口:api.start()

useSpring 可以返回一个包含两个元素的数组:const [springs, api] = useSpring(() => ({ from: { x: 0 } }))。api 对象可以让您以编程方式进行控制。调用 api.start({ x: 100 }) 可动画过渡到新值,调用 api.stop() 可冻结动画,调用 api.set({ x: 50 }) 可在不播放动画的情况下直接跳到目标值。

何时使用声明式与命令式方式

当动画取决于正常变化的 React 状态时,请使用声明式形式 useSpring({ from, to })。当您需要从事件处理器、手势或异步操作触发动画,且不希望导致 React 重新渲染时,请使用带有 api.start() 的命令式形式。

弹簧事件回调

useSpring 接受配置中的生命周期回调。弹簧开始动画时会触发 onStart。每一帧都会触发 onChange,并提供当前值,适合用于跟踪位置的副作用。弹簧在最终值处稳定下来时会触发 onRest,表示动画已完成。

状态变化时重新运行弹簧动画

在声明式形式中,传给 useSpring 的值发生变化时,useSpring 会自动重新运行动画。例如,useSpring({ opacity: isVisible ? 1 : 0 }) 会在每次 isVisible 变化时为不透明度播放动画。这是将弹簧动画与组件状态关联起来的最简单方式。

弹簧物理参数

在 react-spring 的配置中,张力和摩擦力控制什么?

课程回顾:useSpring 基础

react-spring 使用物理规律播放动画:张力(刚度)、摩擦力(阻尼)和质量共同定义运动。useSpring({ from, to }) 会返回应用于 animated.* 组件的 SpringValue 对象。预设配置(gentle、wobbly、stiff、slow)涵盖了常见场景。命令式接口可以通过 api.start()、api.stop() 和 api.set() 实现以编程方式控制。动画稳定后会触发 onRest。

常见问题解答

「React Spring 基础:useSpring 钩子」课时是免费的吗?

是的 — 「React Spring 基础:useSpring 钩子」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「React Spring 基础:useSpring 钩子」这节课中我会学到什么?

使用 useSpring 制作值动画,配置张力、摩擦力和质量,让运动更自然 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「React Spring 基础:useSpring 钩子」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Academy 课中编写并运行代码吗?

能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. React Spring 基础:useSpring 钩子
  2. 动画组件与样式插值
  3. 使用 useTrail 和 useChain 实现序列动画
  4. 使用 use-gesture 实现手势驱动动画
← 返回 React Academy