指南 · 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 的组件。
// 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 处理离场和布局。