aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh hoạ useEffect gọi API và đồng bộ dữ liệu trong React Native

useEffect trong React Native: hiểu đúng để gọi API và đồng bộ dữ liệu

admin by admin
22/07/2026
in Lập trình Mobile, React Native
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

useEffect là hook mà người mới thường vừa cần sớm, vừa dễ hiểu sai. Bạn sẽ gặp nó khi muốn gọi API, đọc dữ liệu ban đầu, lắng nghe sự kiện, hoặc đồng bộ component với một hệ thống bên ngoài React.

Điều quan trọng: useEffect không phải nơi để viết mọi logic. Nó dành cho những “tác vụ phụ” xảy ra sau khi component render.

useEffect dùng để làm gì?

Trong React Native, UI được render từ state và props. Nhưng app thực tế còn phải làm nhiều việc bên ngoài UI: gọi API, đăng ký listener, đọc AsyncStorage, theo dõi trạng thái mạng, hoặc cleanup timer. Những việc này gọi chung là effect.

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

function ArticleScreen() {
  const [loading, setLoading] = useState(true);
  const [title, setTitle] = useState('');

  useEffect(() => {
    async function loadArticle() {
      setLoading(true);
      const response = await fetch('https://example.com/api/article');
      const data = await response.json();
      setTitle(data.title);
      setLoading(false);
    }

    loadArticle();
  }, []);

  if (loading) {
    return <ActivityIndicator />;
  }

  return <Text>{title}</Text>;
}

Dấu [] ở cuối nghĩa là effect này chạy sau lần render đầu tiên, thường dùng cho việc load dữ liệu ban đầu.

Dependency array là gì?

Tham số thứ hai của useEffect gọi là dependency array. Nó nói cho React biết effect phụ thuộc vào dữ liệu nào.

useEffect(() => {
  // Chạy lại mỗi khi articleId thay đổi
  loadArticle(articleId);
}, [articleId]);

Nếu bỏ dependency array, effect sẽ chạy sau mọi lần render. Điều này đôi khi đúng, nhưng với người mới thường gây vòng lặp gọi API liên tục.

Cleanup là gì?

Một số effect cần dọn dẹp khi component bị unmount hoặc trước khi effect chạy lại. Ví dụ timer, listener, subscription. Khi đó bạn return một function cleanup.

useEffect(() => {
  const timerId = setInterval(() => {
    console.log('Đang chạy timer');
  }, 1000);

  return () => {
    clearInterval(timerId);
  };
}, []);

Nếu không cleanup, app có thể bị rò rỉ listener, timer chạy thừa hoặc cập nhật state khi màn hình đã rời đi.

Đừng lạm dụng useEffect

Một lỗi phổ biến là thấy gì cũng đưa vào useEffect. Nếu bạn chỉ cần tính dữ liệu để render UI, hãy tính trực tiếp trong component. Ví dụ nối họ tên, lọc danh sách nhỏ, format label đơn giản thường không cần effect.

// Không cần useEffect
const fullName = `${firstName} ${lastName}`;

Hãy dùng effect khi component cần tương tác với thứ nằm ngoài quá trình render: API, storage, timer, event listener, native module, analytics.

Mẫu gọi API dễ đọc hơn

Khi gọi API thật, bạn nên có đủ trạng thái loading, error và data. Như vậy UI không bị trắng khi lỗi mạng.

const [articles, setArticles] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);

useEffect(() => {
  let cancelled = false;

  async function loadArticles() {
    try {
      setLoading(true);
      setError(null);

      const response = await fetch('https://example.com/api/articles');
      const data = await response.json();

      if (!cancelled) {
        setArticles(data);
      }
    } catch (err) {
      if (!cancelled) {
        setError('Không tải được dữ liệu');
      }
    } finally {
      if (!cancelled) {
        setLoading(false);
      }
    }
  }

  loadArticles();

  return () => {
    cancelled = true;
  };
}, []);

Biến cancelled giúp tránh cập nhật state sau khi component không còn cần dữ liệu nữa. Với dự án lớn, bạn có thể dùng thư viện chuyên biệt cho data fetching, nhưng hiểu mẫu cơ bản này vẫn rất quan trọng.

Lỗi thường gặp

Lỗi đầu tiên là quên dependency array khiến effect chạy liên tục. Lỗi thứ hai là thêm sai dependency làm dữ liệu không cập nhật khi props thay đổi. Lỗi thứ ba là gọi API nhưng không xử lý loading/error. Lỗi thứ tư là không cleanup listener hoặc timer.

Kết luận

useEffect giúp React Native kết nối UI với thế giới bên ngoài: API, storage, timer, listener và native APIs. Người mới nên nhớ: render UI bằng state/props, còn effect dùng cho tác vụ phụ sau render. Hiểu ranh giới này sẽ giúp code dễ đoán và ít lỗi hơn.

Nguồn tham khảo: React: useEffect, Synchronizing with Effects.

SummarizeShare234
admin

admin

Related Stories

Minh họa Firebase Cloud Messaging gửi push notification tới ứng dụng React Native trên Android và iOS

Hướng dẫn tích hợp Firebase Cloud Messaging (FCM) vào React Native từ A-Z

by admin
02/08/2026
0

Hướng dẫn tích hợp Firebase Cloud Messaging vào React Native từ A-Z: Android, iOS/APNs, quyền notification, FCM token, foreground, background và backend.

Minh họa các hook nâng cao trong React Native kết nối với ứng dụng mobile

Các hook nâng cao trong React Native: dùng đúng để code gọn và tối ưu hiệu năng

by admin
30/07/2026
0

Hướng dẫn chi tiết các hook nâng cao trong React Native: useReducer, useContext, useMemo, useCallback, useRef, transition, custom hook và tối ưu hiệu năng.

Ảnh minh họa bài phỏng vấn Senior React Native

Tổng hợp 50 câu hỏi/trả lời phỏng vấn Senior React Native

by admin
27/07/2026
0

50 câu hỏi phỏng vấn Senior React Native bằng tiếng Việt về technical leadership, architecture, performance, release strategy, observability, security và mentoring.

Ảnh minh họa bài phỏng vấn Middle React Native

Tổng hợp 50 câu hỏi/trả lời phỏng vấn Middle React Native

by admin
27/07/2026
0

50 câu hỏi phỏng vấn Middle React Native bằng tiếng Việt về kiến trúc app, state management, performance, native build, testing, CI/CD và release.

Next Post
Minh hoạ style và layout trong React Native với màn hình mobile, spacing và typography

Style và Layout trong React Native: nền móng để dựng UI mobile

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • Hướng dẫn tích hợp Firebase Cloud Messaging (FCM) vào React Native từ A-Z
  • Các hook nâng cao trong React Native: dùng đúng để code gọn và tối ưu hiệu năng
  • Tổng hợp 50 câu hỏi/trả lời phỏng vấn Senior React Native

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.