🌐 Gọi API với fetch: loading, error và cleanup

By Better Wise

Bài trước bạn đã nắm useEffect dùng để chạy side effect sau khi render, và mảng phụ thuộc quyết định effect chạy lại khi nào. Bài này lấy đúng thứ đó để làm việc mà app React nào cũng phải làm: lấy dữ liệu từ server rồi hiển thị.

Bạn sẽ làm được gì sau bài này

  • Viết useEffect gọi fetch và đưa kết quả vào state.
  • Hiển thị rõ ba khoảnh khắc: đang tải, lỗi, có dữ liệu.
  • Hủy request bằng AbortController khi component unmount.

Ba khoảnh khắc của một lần gọi API

Ví dụ đời thường: bạn gọi món ở quán. Có ba khoảnh khắc: đang chờ món, quán báo hết món, món được bưng ra. Giao diện cũng vậy. Nếu thiếu khoảnh khắc "đang chờ", người dùng sẽ nhìn màn hình trắng và tưởng app treo.

flowchart TD
    Start["🟢<br/>Component mount"] --> Loading["⏳<br/>loading = true"]
    Loading --> Check{"res.ok ?"}
    Check -->|"true"| Success["✅<br/>setTodos(data)"]
    Check -->|"false"| Fail["❌<br/>setError(message)"]
    Success --> Done["🛑<br/>loading = false"]
    Fail --> Done

Important: fetch chỉ reject khi có lỗi mạng (mất wifi, sai domain). Server trả 404 hay 500 thì fetch vẫn coi là xong, nên bạn phải tự kiểm tra res.ok.

Ví dụ mẫu: tải danh sách việc cần làm

Ta đi từng bước trên component TodoList của dự án quản lý nhỏ.

  1. Khai báo ba state: todos (dữ liệu), loading (mặc định true), error (mặc định null).
  2. Trong useEffect, tạo AbortController để có thể hủy request.
  3. Gọi fetch, kiểm tra res.ok, rồi res.json() để đổi response thành object.
  4. Render theo ba nhánh: loading trước, error sau, cuối cùng là danh sách.

In this lesson

  • Cleanup: hủy request khi component unmount
  • Lỗi hay gặp khi gọi fetch trong useEffect
  • Tự kiểm tra nhanh
  • Chốt lại trước khi vào dự án

About this course

Part of React từ con số 0 cho người chỉ biết HTML — Khóa học dẫn dắt người chỉ biết HTML/CSS đi qua JavaScript cần thiết và các khái niệm cốt lõi của React. Kết thúc khóa, bạn tự xây được một ứng dụng React hoàn chỉnh với form, danh sách và dữ liệu từ API.

Level
Beginner
Goal
Fundamentals
Language
Vietnamese
Focus
JavaScript ES6 đủ dùng cho React Component, JSX và props State và vòng đời với hooks Form, danh sách và gọi API Tư duy khai báo thay vì thao tác DOM
Prior knowledge
HTML cơ bản, CSS cơ bản
Practice
Exercises + capstone project
Time
~5.8h
Voice
một lập trình viên frontend kiên nhẫn, luôn đưa ví dụ đời thường với HTML quen thuộc trước khi chuyển sang code React, và chỉ ra những lỗi người mới hay mắc.
Not covered
Next.js và SSR, Redux và quản lý state phức tạp, TypeScript nâng cao, Testing chuyên sâu, Tối ưu hiệu năng nâng cao

This lesson is premium content. Sign in and purchase the course to view the full content. Sign in