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 hoạ React Native gọi API và hiển thị loading error empty success state

Gọi API trong React Native: loading, error và empty state

by admin
22/07/2026
0

Học cách gọi API bằng fetch trong React Native và hiển thị đầy đủ loading, error, empty và success state để UI dễ dùng hơn.

Minh hoạ điều hướng giữa các màn hình trong React Native bằng stack và tab

Navigation giữa các màn hình trong React Native cho người mới

by admin
22/07/2026
0

Hiểu screen, stack, tab, params và cách dùng React Navigation để chuyển giữa các màn hình trong app React Native.

Minh hoạ form TextInput validation và keyboard trong React Native

Form cơ bản với TextInput trong React Native

by admin
22/07/2026
0

Học cách tạo form cơ bản trong React Native bằng TextInput, state, validation đơn giản, submit button và xử lý keyboard-friendly layout.

Minh hoạ FlatList hiển thị danh sách bài viết trong React Native

Xây màn hình danh sách với FlatList trong React Native

by admin
22/07/2026
0

FlatList là component quan trọng để hiển thị danh sách dài trong React Native. Bài này hướng dẫn render item, keyExtractor, empty và loading state.

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

  • Gọi API trong React Native: loading, error và empty state
  • Navigation giữa các màn hình trong React Native cho người mới
  • Form cơ bản với TextInput trong React Native

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • 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.