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

搜尋

輸入關鍵字搜尋文件。