+15

Toàn Tập Về Các Loại State Trong React

Trong React, state là một khái niệm quan trọng giúp bạn theo dõi và quản lý dữ liệu thay đổi theo thời gian trong ứng dụng. Tuy nhiên, không phải tất cả state đều giống nhau. Tuỳ vào phạm vi sử dụng và nguồn dữ liệu, state trong React có thể được phân thành nhiều loại khác nhau.

Bài viết này sẽ giới thiệu 5 loại state phổ biến trong React, cùng với ví dụ và cách áp dụng trong thực tế.

1. Local State (State cục bộ)

Local state là loại state được khai báo và sử dụng trong phạm vi của một component cụ thể. Đây là loại state phổ biến nhất và thường được tạo bằng hook useState.

Dùng để:

  • Theo dõi input trong form
  • Kiểm soát trạng thái hiển thị của modal, dropdown
  • Quản lý counter, toggle...

Ví dụ:

import { useState } from 'react';

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

  return (
    <button onClick={() => setCount(count + 1)}>
      Đã bấm {count} lần
    </button>
  );
}

2. Global State (State toàn cục)

Khi bạn cần chia sẻ dữ liệu giữa nhiều component không cùng cấp, bạn cần Global state. Đây là loại state nằm ngoài component cụ thể, thường được quản lý bằng Context API hoặc các thư viện như Redux, Zustand, Recoil...

Dùng để:

  • Quản lý người dùng đăng nhập
  • Cài đặt giao diện (theme, ngôn ngữ)
  • Giỏ hàng trong e-commerce...

Ví dụ (dùng Context API):

const ThemeContext = React.createContext();

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Navbar />
    </ThemeContext.Provider>
  );
}

function Navbar() {
  const theme = React.useContext(ThemeContext);
  return <div className={theme}>Thanh điều hướng</div>;
}

3. Derived State (State dẫn xuất)

Derived state không phải là state lưu trữ trực tiếp mà được tính toán dựa trên props hoặc các state khác. Bạn không nên lưu nó vào useState nếu không thực sự cần, mà nên tính toán trong quá trình render hoặc dùng useMemo.

Dùng để:

  • Tạo dữ liệu hiển thị từ state khác
  • Lọc, sắp xếp dữ liệu đầu vào

Ví dụ:

function Greeting({ user }) {
  const fullName = `\${user.firstName} \${user.lastName}`;
  return <p>Xin chào, {fullName}</p>;
}

4. Server State (State từ server)

Đây là loại state đến từ phía server, thường thông qua API. Nó có thể thay đổi ngoài tầm kiểm soát của ứng dụng, nên cần được xử lý đặc biệt. Thay vì useEffect + fetch, bạn nên dùng thư viện như React Query, SWR để dễ quản lý cache, loading, error.

Dùng để:

  • Tải danh sách sản phẩm, bài viết
  • Quản lý dữ liệu bất đồng bộ

Ví dụ (React Query):

import { useQuery } from '@tanstack/react-query';

function ProductList() {
  const { data, isLoading } = useQuery(['products'], fetchProducts);

  if (isLoading) return <p>Đang tải...</p>;
  return <ul>{data.map(p => <li key={p.id}>{p.name}</li>)}</ul>;
}

5. URL State (State trong URL)

URL cũng có thể chứa thông tin phản ánh trạng thái hiện tại của ứng dụng, như filter, tab đang chọn, trang hiện tại... Dữ liệu này gọi là URL state.

Dùng để:

  • Phân trang, tìm kiếm
  • Cho phép chia sẻ URL giữ nguyên trạng thái giao diện

Ví dụ (React Router v6+):

import { useSearchParams } from 'react-router-dom';

function SearchPage() {
  const [searchParams, setSearchParams] = useSearchParams();
  const keyword = searchParams.get('q');

  return <p>Từ khoá tìm kiếm: {keyword}</p>;
}

🔚 Tổng Kết

Loại State Phạm vi Dùng khi...
Local State Trong 1 component Dữ liệu đơn giản, độc lập
Global State Toàn ứng dụng Dữ liệu dùng chung nhiều nơi
Derived State Từ state/props khác Tính toán từ dữ liệu đã có
Server State Từ API Dữ liệu từ backend
URL State Từ URL Lọc, phân trang, chia sẻ trạng thái

Việc hiểu rõ và chọn đúng loại state giúp bạn viết ứng dụng React sạch, hiệu quả và dễ mở rộng. Nếu bạn mới bắt đầu, hãy tập trung vào localserver state trước, sau đó tìm hiểu thêm global state và các kỹ thuật nâng cao hơn.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí