~/VibeHandbook
PDF ฟรี

แอป / มือถือ

reactnative.dev

React Native

What it is

React Native เป็นเฟรมเวิร์กโอเพนซอร์ส (open-source ) ที่สร้างขึ้นที่ Meta สำหรับสร้างแอปมือถือแบบเนทีฟด้วย React และ JavaScript (หรือ TypeScript) คุณเขียนคอมโพเนนต์ในแบบเดียวกับที่คุณเขียนสำหรับเว็บ แต่คอมโพเนนต์เหล่านั้นจะถูกเรนเดอร์ออกมาเป็นวิดเจ็ต UI (User Interface — ส่วนที่ผู้ใช้เห็นและโต้ตอบด้วยบนหน้าจอ) แบบเนทีฟจริงของ iOS และ Android แทนที่จะเป็นเว็บวิว โค้ดส่วนใหญ่ถูกใช้ร่วมกันระหว่างทั้งสองแพลตฟอร์ม ในขณะที่คุณยังสามารถลงไปเขียนโค้ดเนทีฟเฉพาะแพลตฟอร์มได้เมื่อจำเป็น

Strengths

  • โค้ดเบสเดียว สองแพลตฟอร์ม — ใช้ลอจิกและ UI ส่วนใหญ่ร่วมกันระหว่าง iOS และ Android
  • ใช้ React ทำให้นักพัฒนาเว็บทำงานได้อย่างมีประสิทธิภาพอย่างรวดเร็ว และมีระบบนิเวศ (ecosystem) ที่ใหญ่มาก
  • เรนเดอร์ออกมาเป็นคอมโพเนนต์เนทีฟจริง ไม่ใช่เว็บวิว จึงให้ความรู้สึกเนทีฟอย่างแท้จริง
  • Fast Refresh ให้ผลตอบรับแทบจะทันทีขณะแก้ไขโค้ด
  • มีทางออกฉุกเฉิน (escape hatch): เขียนโมดูลเนทีฟด้วย Swift/Kotlin ได้เมื่อเจอข้อจำกัด

Trade-offs

  • ลองนึกภาพล่ามที่คอยแปลข้อความระหว่างคนสองคนที่พูดคนละภาษา จะมีความล่าช้าเล็กน้อยทุกครั้งที่ส่งต่อข้อความ React Native ก็มีสะพานเชื่อม (bridge) ที่คล้ายกันนี้ระหว่าง JavaScript กับโค้ดเนทีฟ ซึ่งอาจทำให้งานที่ต้องการประสิทธิภาพสูงหรือเน้นแอนิเมชันซับซ้อนขึ้นได้
  • ดีเพนเดนซีเนทีฟและเครื่องมือสำหรับ build อาจเปราะบางและอ่อนไหวต่อเวอร์ชัน
  • คุณยังคงต้องมีความรู้เฉพาะแพลตฟอร์ม (และเครื่อง Mac สำหรับ build iOS) เพื่อจัดการกับส่วนที่ยาก
  • ฟีเจอร์ใหม่ ๆ บางอย่างของ OS (Operating System — ซอฟต์แวร์หลักของอุปกรณ์ เช่น iOS หรือ Android) อาจตามหลังอยู่จนกว่าชุมชนหรือตัวคุณเองจะห่อหุ้ม (wrap) มันขึ้นมาใช้งานได้

When to use it

เลือกใช้ React Native เมื่อคุณต้องการให้ทีมเดียวและโค้ดเบสเดียวสามารถส่งมอบแอปเนทีฟได้ทั้งบน iOS และ Android โดยเฉพาะอย่างยิ่งหากทีมของคุณรู้จัก React อยู่แล้ว มันเหมาะอย่างยิ่งสำหรับแอปประเภทเนื้อหา อีคอมเมิร์ซ และแอปแบบ CRUD (Create, Read, Update, Delete)

Vibe coding fit

React Native เป็นมิตรต่อการเขียนโค้ดด้วยความช่วยเหลือของ AI เพราะโดยพื้นฐานแล้วมันคือ React นั่นเอง — ผู้ช่วย AI มีความเชี่ยวชาญอย่างลึกซึ้งในเรื่องคอมโพเนนต์ hook และ prop ให้บอกโมเดลให้ใช้ TypeScript ให้คอมโพเนนต์มีขนาดเล็กและไม่เก็บสถานะ (stateless) เท่าที่จะทำได้ และให้จับคู่กับ Expo เพื่อการ build และการใช้โมดูลเนทีฟที่ไร้ความยุ่งยาก ระบุแพลตฟอร์มเป้าหมายและความสามารถเนทีฟที่ต้องการไว้ตั้งแต่ต้น เพื่อให้โค้ดที่สร้างขึ้นเลือกใช้ไลบรารีที่ถูกต้อง

import { Text, Button, View } from "react-native";
import { useState } from "react";

export default function Counter() {
  const [count, setCount] = useState(0);
  return (
    <View>
      <Text>Count: {count}</Text>
      <Button title="Add" onPress={() => setCount(count + 1)} />
    </View>
  );
}