指南 · 07

从 React Native 迁移

哪些保持不变、哪些有所不同,以及 Web 额外提供了什么。

相同的调用

控制器、计算图和配置都沿用 React Native 的 Animated。在 React Native 渲染 Animated.View 的地方,渲染 Animated.div 之类的 DOM 宿主元素。useAnimatedValue 的用法也与 React Native 相同。

正在准备示例…

需要了解的差异

这些细节能让移植过来的代码保持在设备上时的行为。

  • 接受 useNativeDriver 和 isInteraction。播放方式则按输出逐一选择:符合条件的输出由浏览器播放,其余由 JavaScript 播放。
  • spring 接受 stiffness/damping/mass、bounciness/speed 或 tension/friction,都不指定时使用 React Native 的默认值。
  • interpolate 支持 easing 和三种外推模式。
  • Easing 与 React Native 一致,包括 elastic。Easing.exp 做了 0.1% 的缩放,使其恰好从 0 开始,从而可以由浏览器播放。
  • decay 的速度单位是每毫秒,spring 的速度单位是每秒,与 React Native 相同。
  • Animated.createAnimatedComponent 用来包装转发 ref 的组件。
Spinner.jsx
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />

// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />

const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });

Animated.loop(
  Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();

Web 额外提供的

普通的 React style 可以直接接受 Hook 的值,seed/pose/respond 描述目的地和手势,Animated.Keep 和 Animated.Scene 处理离场和布局。

搜索

输入关键词搜索文档。