0
0
Lập trình
NM

Quản lý State trong React 2025: Context API vs Zustand 🐻

Đăng vào 6 tháng trước

• 5 phút đọc

Quản lý State trong React 2025: Context API vs Zustand 🐻

Xin chào các lập trình viên 👋,

Năm 2025, hệ sinh thái React tiếp tục phát triển với các thư viện mới, cải tiến về render phía server (React Server Components, Suspense, Next.js 15+) và công cụ phát triển tốt hơn. Khi nói đến quản lý state toàn cục, hai lựa chọn phổ biến nhất cho các ứng dụng nhẹ vẫn là:

  • React Context API — được tích hợp sẵn trong React.
  • Zustand — thư viện nhẹ, mở rộng, ưu tiên hooks đã trưởng thành thành tiêu chuẩn sản xuất.

Hãy cùng khám phá sâu hơn và hiểu rõ sức mạnh, nhược điểm và khi nào nên chọn một trong hai.


🔹 Context API là gì?

Context API là giải pháp tích hợp sẵn của React để chia sẻ state giữa các component mà không cần truyền props. Nó sử dụng:

  • createContext → để định nghĩa một context.
  • useContext → để tiêu thụ các giá trị bên trong các component.

Ví dụ (cú pháp 2025 — vẫn còn phù hợp)

javascript Copy
import React, { createContext, useContext, useState } from "react";

const MyContext = createContext<{ state: string; setState: (s: string) => void } | null>(null);

export const MyProvider = ({ children }: { children: React.ReactNode }) => {
  const [state, setState] = useState("giá trị mặc định");

  return (
    <MyContext.Provider value={{ state, setState }}>
      {children}
    </MyContext.Provider>
  );
};

export const MyComponent = () => {
  const context = useContext(MyContext);
  if (!context) throw new Error("MyComponent phải được sử dụng bên trong MyProvider");

  return (
    <div>
      <p>{context.state}</p>
      <button onClick={() => context.setState("giá trị mới")}>Thay đổi State</button>
    </div>
  );
};

Trường hợp sử dụng:

  • Chia sẻ state nhỏ đến vừa.
  • Tránh việc truyền props trong các component lồng nhau.

⚠️ Hạn chế (2025):

  • Gây ra re-render không cần thiết trong các cây lớn.
  • Không có persistence hoặc middleware tích hợp.
  • Cần nhiều mã mẫu cho state phức tạp.

🔹 Zustand là gì?

Zustand là một thư viện quản lý state toàn cục nhẹ đã trưởng thành đáng kể vào năm 2025:

  • Dựa trên hooks.
  • Tối ưu hóa cho hiệu suất (giảm thiểu re-render).
  • Cung cấp middleware cho việc lưu trữ, ghi log, devtools và luồng bất đồng bộ.
  • Nay được sử dụng rộng rãi trong Web3 dApps, dashboard game, và ứng dụng server-side Next.js.

Ví dụ về Store

javascript Copy
import { create } from "zustand";

interface Store {
  state: string;
  setState: (s: string) => void;
}

const useStore = create<Store>((set) => ({
  state: "giá trị mặc định",
  setState: (newState) => set({ state: newState }),
}));

export const MyComponent = () => {
  const { state, setState } = useStore();
  return (
    <div>
      <p>{state}</p>
      <button onClick={() => setState("giá trị mới")}>Thay đổi State</button>
    </div>
  );
};

Trường hợp sử dụng:

  • State toàn cục trong ứng dụng nhỏ → lớn.
  • Ứng dụng yêu cầu hiệu suất cao (game, 3D, Web3).
  • Ứng dụng yêu cầu state được lưu trữ giữa các phiên.

🔹 Lưu trữ State trong Zustand (Thực tiễn tốt nhất 2025)

Hệ sinh thái middleware của Zustand làm cho việc lưu trữ trở nên dễ dàng:

javascript Copy
import { create } from "zustand";
import { persist } from "zustand/middleware";

interface Store {
  state: string;
  setState: (s: string) => void;
}

const useStore = create<Store>()(
  persist(
    (set) => ({
      state: "giá trị mặc định",
      setState: (newState) => set({ state: newState }),
    }),
    {
      name: "my-app-store", // khóa trong bộ nhớ
      version: 1,           // hỗ trợ di chuyển
    }
  )
);

Bây giờ state của bạn sẽ tồn tại sau khi làm mới sử dụng localStorage/sessionStorage — với hỗ trợ di chuyển cho các phiên bản ứng dụng trong tương lai.


🔹 So sánh Context API và Zustand (2025)

Tính năng Context API Zustand 🐻
Cài đặt Tích hợp sẵn, không cần phụ thuộc khác Cần cài đặt zustand
Hiệu suất Có thể re-render toàn bộ cây Tối ưu, giảm thiểu re-render
Khả năng mở rộng Tốt nhất cho ứng dụng nhỏ/vừa Tuyệt vời cho ứng dụng lớn
Lưu trữ Thủ công với localStorage/sessionStorage Middleware tích hợp
Mã mẫu Có thể dài dòng với state phức tạp Rất ngắn gọn
Hệ sinh thái (2025) Giới hạn trong các tính năng của React Hệ sinh thái phong phú (persist, devtools, immer, v.v.)

🔹 Ưu và nhược điểm

✅ Context API

  • Ưu điểm: Tích hợp sẵn, API đơn giản, không cần phụ thuộc khác.
  • Nhược điểm: Vấn đề hiệu suất, không thể mở rộng, không có tính năng lưu trữ.

✅ Zustand

  • Ưu điểm: Có thể mở rộng, hiệu suất cao, hỗ trợ lưu trữ, middleware.
  • Nhược điểm: Phụ thuộc bên ngoài, có một chút đường cong học tập.

🔹 Kết luận (2025)

  • Sử dụng Context API khi:

    • State của bạn đơn giản, ứng dụng nhỏ và bạn không muốn có phụ thuộc nào.
  • Sử dụng Zustand khi:

    • Bạn cần khả năng mở rộng, lưu trữhiệu suất.
    • Ứng dụng của bạn đang trong sản xuất hoặc sẽ mở rộng.

👉 Vào năm 2025, nhiều đội ngũ sử dụng Zustand + React Query (TanStack Query) cùng nhau, xử lý cả state serverstate client một cách hiệu quả.


✍️ Cảm ơn bạn đã đọc!

Nếu điều này hữu ích, hãy theo dõi tôi để có thêm nhiều thông tin về React 2025.

  • 💻 GitHub: [your-handle]
  • 🐦 Twitter: [your-handle]
  • ☕ Hỗ trợ: [buymeacoffee link]

✍️ Viết bởi: Cristian Sifuentes — Lập trình viên Full-stack & người đam mê AI/JS, nhiệt huyết với việc mở rộng kiến trúc và dạy các đội ngũ phát triển cách phát triển trong hệ sinh thái JS hiện đại.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào