State Management di Mobile — Mobile

State Management di React Native Konsep state management di React Native sama dengan React web. Yang berbeda hanyalah pertimbangan performa karena resource…

State Management di React Native

Konsep state management di React Native sama dengan React web. Yang berbeda hanyalah pertimbangan performa karena resource mobile lebih terbatas.

useState — Local State

import { useState } from 'react';
import { View, Text, Pressable } from 'react-native';

export default function Counter() {
  const [count, setCount] = useState(0);

  return (
    <View>
      <Text style={{ fontSize: 48 }}>{count}</Text>
      <Pressable onPress={() => setCount(c => c + 1)}>
        <Text>+ Tambah</Text>
      </Pressable>
    </View>
  );
}

useContext — Shared State

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

const ThemeContext = createContext();

export function ThemeProvider({ children }) {
  const [dark, setDark] = useState(false);

  return (
    <ThemeContext.Provider value={{ dark, toggleTheme: () => setDark(d => !d) }}>
      {children}
    </ThemeContext.Provider>
  );
}

export const useTheme = () => useContext(ThemeContext);

// Di komponen manapun:
function Header() {
  const { dark, toggleTheme } = useTheme();
  return (
    <Pressable onPress={toggleTheme}>
      <Text>{dark ? '🌙' : '☀️'} Toggle Theme</Text>
    </Pressable>
  );
}

Zustand — Lightweight Global State

// store/useCartStore.ts
import { create } from 'zustand';

interface CartStore {
  items: CartItem[];
  addItem: (item: CartItem) => void;
  removeItem: (id: string) => void;
  total: () => number;
}

export const useCartStore = create<CartStore>((set, get) => ({
  items: [],
  addItem: (item) => set((state) => ({
    items: [...state.items, item],
  })),
  removeItem: (id) => set((state) => ({
    items: state.items.filter((i) => i.id !== id),
  })),
  total: () => get().items.reduce((sum, i) => sum + i.price, 0),
}));

// Di komponen:
function CartBadge() {
  const count = useCartStore((s) => s.items.length);
  return <Text>Cart ({count})</Text>;
}

Tips Performa State di Mobile

Yang akan kamu pelajari