React Native คือ ตอนที่ 7 : การจัดการสถานะ (State Management)

  1. การทำความเข้าใจสถานะ (State) ใน React Native
  2. พื้นฐาน: การใช้การจัดการสถานะในตัว (Built-in State Management) ของ React
  3. Context API: การจัดการสถานะส่วนกลางในตัว (Built-in Global State Management) ของ React
  4. Redux: คอนเทนเนอร์สถานะที่คาดการณ์ได้ (Predictable State Container)
  5. MobX: การจัดการสถานะที่เรียบง่ายและปรับขนาดได้ (Scalable)

การจัดการสถานะเป็นส่วนสำคัญของกระบวนการทำแอพ React Native และทำแอพมือถือใดๆ ด้วยความก้าวหน้าอย่างรวดเร็วของไลบรารีและเฟรมเวิร์กของ JavaScript วิธีที่เราจัดการสถานะจึงพัฒนาขึ้น ทำให้นักพัฒนามีตัวเลือกมากมาย ในบริบทของการทำแอพ React Native และทำแอพมือถือ ซึ่งเป็นเฟรมเวิร์กข้ามแพลตฟอร์มยอดนิยม การจัดการสถานะสามารถสร้างหรือทำลายประสิทธิภาพของแอปพลิเคชันและประสบการณ์ผู้ใช้ของคุณ คู่มือนี้จะให้ความเข้าใจเชิงลึกเกี่ยวกับการจัดการสถานะใน React Native และสำรวจเทคนิคและไลบรารียอดนิยมที่ใช้ในอุตสาหกรรม

1. การทำความเข้าใจสถานะ (State) ใน React Native

ก่อนที่เราจะดำดิ่งสู่เทคนิคการจัดการสถานะต่างๆ เรามาทำความเข้าใจกันก่อนว่า “สถานะ” หมายถึงอะไรในบริบทของแอปพลิเคชัน React Native กล่าวง่ายๆ สถานะหมายถึงแหล่งข้อมูลที่สามารถเปลี่ยนแปลงได้ตลอดเวลาและส่งผลต่อลักษณะการทำงานหรือการเรนเดอร์ของคอมโพเนนต์ สถานะในแอปพลิเคชัน React Native มักจะใช้เพื่อเรียกใช้การอัปเดต UI

เมื่อสถานะของส่วนประกอบเปลี่ยนไป ส่วนประกอบนั้นจะแสดงผลอีกครั้ง แต่เมื่อแอปพลิเคชันมีความซับซ้อนมากขึ้น การจัดการสถานะอาจกลายเป็นเรื่องท้าทาย คอมโพเนนต์หลายตัวอาจต้องเข้าถึงสถานะเดียวกัน หรือคอมโพเนนต์อาจจำเป็นต้องทราบเกี่ยวกับการเปลี่ยนแปลงสถานะที่เกิดขึ้นที่อื่นในแอปพลิเคชัน นี่คือที่มาของห้องสมุดและโซลูชันการจัดการของรัฐ

2. พื้นฐาน: การใช้การจัดการสถานะในตัว (Built-in State Management) ของ React

React Native เป็นอนุพันธ์ของ ReactJS ได้รับประโยชน์จากความสามารถในการจัดการสถานะท้องถิ่นในตัวของ React React’s useStateและuseReducerhooks ช่วยให้คุณจัดการสถานะที่ระดับคอมโพเนนต์

import React, { useState } from 'react';
import { Button, Text } from 'react-native';

const MyComponent = () => {
  const [count, setCount] = useState(0);

  return (
    <>
      <Text>You clicked {count} times</Text>
      <Button onPress={() => setCount(count + 1)} title="Click me" />
    </>
  );
};

แม้ว่าการจัดการสถานะรูปแบบนี้จะเรียบง่ายและใช้งานได้ดีกับแอปพลิเคชันขนาดเล็กหรือส่วนประกอบแต่ละส่วน แต่การจัดการสถานะจะกลายเป็นเรื่องยากเมื่อขนาดแอปพลิเคชันใหญ่ขึ้น และสถานะจำเป็นต้องแชร์ผ่านส่วนประกอบต่างๆ

3. Context API: การจัดการสถานะส่วนกลางในตัว (Built-in Global State Management) ของ React

Context API ของ React เป็นโซลูชันในตัวสำหรับจัดการสถานะส่วนกลาง กล่าวคือ สถานะที่ใช้ร่วมกันระหว่างส่วนประกอบต่างๆ บริบทให้วิธีการส่งข้อมูลผ่านแผนผังองค์ประกอบโดยไม่ต้องส่งอุปกรณ์ประกอบฉากด้วยตนเองในทุกระดับ คุณเพียงสร้างบริบท จากนั้นใช้คอมโพเนนต์ผู้ให้บริการเพื่อรวมส่วนของแอปของคุณที่ต้องการเข้าถึงบริบทนั้น ส่วนประกอบใดๆ ภายในผู้ให้บริการสามารถเข้าถึงค่าบริบทได้

ตัวอย่างต่อไปนี้สาธิตการใช้ Context API ในแอปพลิเคชัน React Native:

import React, { createContext, useState, useContext } from 'react';
import { Button, Text } from 'react-native';

// Create a Context
const CountContext = createContext();

// Create a Provider which will "provide" the context value to children
const CountProvider = ({ children }) => {
  const [count, setCount] = useState(0);

  return (
    <CountContext.Provider value={{ count, setCount }}>
      {children}
    </CountContext.Provider>
  );
};

const MyComponent = () => {
  const { count, setCount } = useContext(CountContext);

  return (
    <>
      <Text>You clicked {count} times</Text>
      <Button onPress={() => setCount(count + 1)} title="Click me" />
    </>
  );
};

const MyApp = () => (
  <CountProvider>
    <MyComponent />
  </CountProvider>
);

แม้ว่า Context API จะแก้ปัญหาการเจาะเสา แต่ก็ยังสามารถใช้งานยากสำหรับแอปพลิเคชันที่ซับซ้อนมากหรือเมื่อมีบริบทจำนวนมาก

4. Redux: คอนเทนเนอร์สถานะที่คาดการณ์ได้ (Predictable State Container)

Redux เป็นไลบรารีการจัดการสถานะยอดนิยมที่ใช้ในแอปพลิเคชัน JavaScript เป็นแหล่งความจริงแหล่งเดียวที่ไม่เปลี่ยนรูปสำหรับสถานะแอปพลิเคชันของคุณ ทำให้การเปลี่ยนแปลงสถานะสามารถคาดเดาได้และติดตามได้ง่าย Redux มักจะรวมกับ React Native เพื่อจัดการสถานะแอปพลิเคชันที่ซับซ้อน

ด้วย Redux สถานะของแอปพลิเคชัน ทั้งหมดของคุณจะถูกจัดเก็บไว้ในแผนผังวัตถุภายในร้านค้า เดียว วิธีเดียวที่จะเปลี่ยนสถานะคือปล่อยการกระทำซึ่งเป็นวัตถุที่อธิบายถึงสิ่งที่เกิดขึ้น เพื่อเชื่อมโยงสถานะและการกระทำเข้าด้วยกัน Redux ต้องการตัวลด – ฟังก์ชันที่ใช้เอฟเฟกต์ของการกระทำกับสถานะ

แม้ว่า Redux จะมอบเครื่องมือที่ยอดเยี่ยมและการสนับสนุนจากชุมชนที่แข็งแกร่ง แต่ก็มีการแนะนำความซับซ้อนและโค้ดสำเร็จรูปมากมาย ขอแนะนำโดยทั่วไปสำหรับแอปพลิเคชันขนาดใหญ่ที่การจัดการสถานะใช้ร่วมกันในหลายๆ คอมโพเนนต์ และต้องการการเปลี่ยนสถานะที่ซับซ้อน

5. MobX: การจัดการสถานะที่เรียบง่ายและปรับขนาดได้ (Scalable)

MobX เป็นไลบรารีการจัดการสถานะยอดนิยมอีกตัวที่มักใช้แทน Redux ซึ่งแตกต่างจาก Redux ซึ่งใช้ข้อมูลที่ไม่เปลี่ยนรูปและตัวลดแบบบริสุทธิ์ MobX อนุญาตให้สถานะเปลี่ยนแปลงได้และเปิดใช้งานการจัดการสถานะผ่านการดำเนินการ

หลักการสำคัญของ MobX คือทุกสิ่งที่ได้มาจากสถานะของแอปพลิเคชันของคุณควรได้รับมาโดยอัตโนมัติ ตัวอย่างเช่น MobX สามารถติดตามโดยอัตโนมัติว่าส่วนประกอบใดกำลังใช้สถานะใด และแสดงผลอีกครั้งเมื่อจำเป็น การติดตามอัตโนมัตินี้ส่งผลให้มีวิธีจัดการสถานะที่ใช้งานง่ายและละเอียดน้อยกว่า เมื่อเทียบกับ Redux

แม้ว่า MobX จะลดจำนวนสำเร็จรูปและความซับซ้อนที่เกี่ยวข้องกับการจัดการสถานะ แต่ลักษณะที่เหมือนเวทมนตร์อาจทำให้เข้าใจและดีบักได้ยากขึ้น โดยเฉพาะอย่างยิ่งสำหรับนักพัฒนาที่ยังใหม่กับไลบรารี


โดยสรุป การจัดการสถานะเป็นส่วนสำคัญของแอปพลิเคชัน React Native และแอปพลิเคชันที่แตกต่างกันอาจต้องการโซลูชันที่แตกต่างกัน การทำความเข้าใจเกี่ยวกับตัวเลือกต่างๆ ที่มีอยู่สามารถช่วยให้คุณเลือกตัวเลือกที่ถูกต้องสำหรับความต้องการของคุณ ไม่ว่าคุณจะกำลังทำแอพ React Native และทำแอพมือถือง่ายๆ ที่มีส่วนประกอบไม่มาก หรือแอปพลิเคชันที่ซับซ้อนมากขึ้นซึ่งมีการเปลี่ยนสถานะและการโต้ตอบที่ซับซ้อน

การทำแอพ React Native และทำแอพมือถือเป็นวิธีที่ยอดเยี่ยมในการสร้างแอปข้ามแพลตฟอร์ม ความสามารถในการใช้ JavaScript และ ReactJS รวมกับเทคนิคการจัดการสถานะที่มีประสิทธิภาพ ช่วยให้คุณทำแอพ React Native และทำแอพมือถือที่มีประสิทธิภาพ ใช้งานได้จริง และเป็นมิตรกับผู้ใช้

โปรดจำไว้ว่าไม่ว่าคุณจะเลือกโซลูชันการจัดการสถานะใด เป้าหมายคือการเขียนแอปพลิเคชันที่มีประสิทธิภาพ จัดการได้ และปรับขนาดได้ และเมื่อความเข้าใจของคุณเกี่ยวกับการจัดการสถานะใน React Native เติบโตขึ้น ความสามารถของคุณในการทำแอพ React Native และทำแอพมือถือบนอุปกรณ์เคลื่อนที่ที่สร้างความพึงพอใจและดึงดูดผู้ใช้ก็จะเพิ่มขึ้นเช่นกัน


React Native คืออะไร

React Native คือ ตอนที่ 6 : การนำทาง (Navigation)
React Native คือ ตอนที่ 8 : ระบบเครือข่ายการสื่อสาร (Networking)