คู่มือ · 02
เว็บและ React Native
import เดียวสำหรับทั้งสองแพลตฟอร์ม Metro เลือกการใช้งานแบบเนทีฟ และ bundler ของเว็บเลือกแบบ DOM
import เดียวกัน
ติดตั้งแพ็กเกจเดียวและ import จากรากของมันในทั้งสองแพลตฟอร์ม React เป็น peer ที่บังคับเพียงตัวเดียว React Native เป็น peer ที่ไม่บังคับสำหรับแอปเนทีฟ ไม่มีแพลตฟอร์มใดต้องใช้ provider ตัวห่อ หรือการเรียกตั้งค่า
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';
export function Score({ points, players }) {
return (
<>
<MotionNumber value={points} />
<MotionList items={players} renderItem={(player) => player.name} />
</>
);
}การเคลื่อนไหวเล่นอย่างไร
บนเว็บ คอมโพเนนต์เล่นด้วย Web Animations API โดยสปริงสุ่มตัวอย่างเชิงวิเคราะห์ จึงไม่ต้องโหลดไลบรารีแอนิเมชันและไม่มีการเรนเดอร์ React ต่อเฟรม บน React Native คอมโพเนนต์ใช้ Animated กับ native driver สำหรับ transform และความทึบ และใช้ JS driver เฉพาะเมื่อเลย์เอาต์ (ความกว้างหรือความสูง) เปลี่ยน
| ส่วน | เว็บ | React Native |
|---|---|---|
| Transform และความทึบ | Web Animations API | Animated, native driver |
| ความกว้างและความสูง | Web Animations API | Animated, JS driver |
| ข้อความสตรีม | ตัวอักษรค่อย ๆ ปรากฏ React เรนเดอร์ไม่กี่ครั้งต่อวินาที | Text จริง ไม่มีการจาง |
| ชีตและการซูม | dialog แบบเนทีฟใน top layer | Modal โปร่งใส |
| เบื้องหลัง | ในแท็บที่ซ่อนอยู่ ข้อความสตรีมแสดงพร้อมกันทั้งหมด | การเคลื่อนไหวไปที่สถานะสุดท้าย |
รายละเอียดเฉพาะของ React Native
API เหมือนกัน นี่คือความต่างที่คุณจะสังเกตเห็นบนอุปกรณ์
- ตัวเลขและข้อความสตรีมยังเป็น
Textจริง การเลือก การตัดบรรทัดnumberOfLinesและการเข้าถึงจึงทำงานตามปกติ MotionSheetและMotionZoomเรนเดอร์ในModalโปร่งใส และปุ่มย้อนกลับปิดได้ScrollViewภายในชีตรักษาท่าทางของตัวเอง ชีตจึงลากได้จากที่จับและพื้นที่คงที่MotionHoldยืนยันทันทีจากการกระทำ activate เพื่อการเข้าถึงMotionSwapแบบ inline วัดเนื้อหาใหม่ในบรรทัดเดียว ใช้inline=—สำหรับเนื้อหาที่ตัดบรรทัด
import { Text, View } from 'react-native';
import { MotionNumber, MotionSheet } from '@kkwaenggwari/animated-chorus';
export function Wallet({ balance, open, setOpen }) {
return (
<View>
<MotionNumber
value={balance}
intl
locale="en-US"
format={{ style: 'currency', currency: 'USD' }}
/>
<MotionSheet open={open} onOpenChange={setOpen} detents={[0.5, 0.9]}>
<Text>Recent activity</Text>
</MotionSheet>
</View>
);
}เลย์เอาต์ของคุณยังเป็นของคุณ
คอมโพเนนต์รักษาเลย์เอาต์ของแพลตฟอร์มไว้: ขนาดข้อความ การตัดบรรทัด การปรับขนาดฟอนต์ ข้อจำกัดของพาเรนต์ และสไตล์ของคุณ การเคลื่อนไหวไม่เคยบังคับความกว้างตัวอักษร ความสูงข้อความตายตัว หรือมาสก์ตัดขอบกับข้อความของคุณ
ตรวจสอบอะไรที่ไหน
พฤติกรรมบนเว็บตรวจสอบในเบราว์เซอร์จริง พฤติกรรมบน React Native ครอบคลุมด้วยการทดสอบโมเดลที่ใช้ร่วมกันและ renderer จำลอง จึงควรตรวจท่าทางและเลย์เอาต์บนอุปกรณ์เป้าหมายก่อนออกรุ่น