Thuta Learning
ရှာဖွေရန်
AdvancedMobile Developmentintermediate

Context API for State Management

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Context API for State Management ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် code ရေးပြီး Expo Go ပေါ်မှာ run ကြည့်တတ်မယ်
  • Real app project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Context API က global-ish state (user login info, theme, language) ကို component tree ရဲ့ level အလိုက် props pass မလုပ်ဘဲ, tree ထဲက component ဘယ်ဟာမဆို တိုက်ရိုက် access လုပ်နိုင်အောင် ဖန်တီးပေးပါတယ် — createContext() ဖြင့် Context ဖန်တီး, Provider ဖြင့် value ကို wrap, useContext() ဖြင့် consumer component ကနေ ဖတ်ယူပါတယ်။ Login state (user ဝင်ထားလား) က app တစ်ခုလုံးက သိချင်တဲ့ information ဖြစ်တာမို့ Context API ရဲ့ classic use case ပါ။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

AuthContext ကို App root မှာ Provider ဖြင့် wrap ထားရင် nested screen ဘယ်လောက်နက်နက် (Home → Detail → Comment → Reply) user info ကို props pass မလိုဘဲ useContext(AuthContext) ခေါ်ရုံနဲ့ ရနိုင်ပါတယ်။ Context ကို state ကြီးကြီးမားမား (large lists, frequently-changing data) အတွက် သုံးရင် unnecessary re-render ပိုများနိုင်တာမို့, ဒီလိုအခြေအနေမှာ dedicated state library (Redux, Zustand) ကို စဉ်းစားသင့်ပါတယ်။

Code နမူနာ

javascript
import { createContext, useContext, useState } from 'react';

const AuthContext = createContext(null);

export function AuthProvider({ children }) {
  const [user, setUser] = useState(null);
  return (
    <AuthContext.Provider value={{ user, setUser }}>
      {children}
    </AuthContext.Provider>
  );
}

export function useAuth() {
  return useContext(AuthContext);
}

// Any nested component:
// const { user } = useAuth();
// return <Text>{user ? `Welcome, ${user.name}` : 'Please log in'}</Text>;
You should see
Component tree ဘယ်လောက်နက်နက် props pass မလိုဘဲ useAuth() ခေါ်ရုံနဲ့ user info ရနိုင်မည်။

၅ မိနစ် စမ်းကြည့်

ThemeContext (light/dark mode) တစ်ခု ကိုယ်တိုင် ဖန်တီးပြီး nested component ၂-၃ ခုက useContext ဖြင့် theme ကို ဖတ်ကြည့်ပါ။

သတိလေးတစ်ချက်

Context value ပြောင်းတိုင်း Provider ရဲ့ child component **အားလုံး** re-render ဖြစ်ပါတယ် (useContext သုံးသည်ဖြစ်စေ, မသုံးသည်ဖြစ်စေ) — performance-sensitive app မှာ Context ကို granular (context အသေးလေး များစွာ ခွဲ) ထားတာ ပိုကောင်းပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Context value ကို component render တိုင်း object အသစ် ({ user, setUser }) ဖန်တီးပြီး unnecessary re-render ဖြစ်စေခြင်း (useMemo ဖြင့် ကာကွယ်နိုင်)
  • State အားလုံးကို Context ထဲ ထည့်ချင်ခြင်း — frequently-changing local state ကို component ကိုယ်တိုင်မှာပဲ ထားသင့်

အခု ကိုယ်တိုင် စမ်းကြည့်

ThemeContext (light/dark mode) တစ်ခု ကိုယ်တိုင် ဖန်တီးပြီး nested component ၂-၃ ခုက useContext ဖြင့် theme ကို ဖတ်ကြည့်ပါ။

You'll know it worked when: Component tree ဘယ်လောက်နက်နက် props pass မလိုဘဲ useAuth() ခေါ်ရုံနဲ့ user info ရနိုင်မည်။

Context API for State Management | Thuta Learning