指南 · 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 處理離場與版面。