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ạ 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

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

Hầu hết app mobile đều có danh sách: danh sách bài viết, sản phẩm, tin nhắn, thông báo, user, đơn hàng. Trong React Native, component bạn nên học sớm là FlatList.

Người mới đôi khi dùng ScrollView rồi map toàn bộ item. Cách đó ổn với vài item, nhưng không phù hợp cho danh sách dài. FlatList được thiết kế để render danh sách hiệu quả hơn, chỉ ưu tiên những phần cần hiển thị trên màn hình.

FlatList cơ bản

import { FlatList, Text, View } from 'react-native';

const articles = [
  { id: '1', title: 'Làm quen với React Native' },
  { id: '2', title: 'Hiểu Props trong React Native' },
  { id: '3', title: 'State làm UI thay đổi' },
];

function ArticleListScreen() {
  return (
    <FlatList
      data={articles}
      keyExtractor={(item) => item.id}
      renderItem={({ item }) => (
        <View style={{ padding: 16 }}>
          <Text>{item.title}</Text>
        </View>
      )}
    />
  );
}

Ba prop quan trọng nhất là data, keyExtractor và renderItem. data là mảng dữ liệu. keyExtractor cho React biết mỗi item có định danh nào. renderItem mô tả cách render từng item.

Tách item thành component riêng

Khi UI của item dài hơn vài dòng, hãy tách thành component riêng. Điều này giúp list screen dễ đọc hơn.

function ArticleItem({ article }) {
  return (
    <View style={styles.card}>
      <Text style={styles.title}>{article.title}</Text>
      <Text style={styles.excerpt}>{article.excerpt}</Text>
    </View>
  );
}

function ArticleListScreen() {
  return (
    <FlatList
      data={articles}
      keyExtractor={(item) => item.id}
      renderItem={({ item }) => <ArticleItem article={item} />}
      contentContainerStyle={styles.content}
    />
  );
}

Empty state: khi không có dữ liệu

Một list tốt không chỉ biết hiển thị dữ liệu. Nó còn cần biết hiển thị gì khi dữ liệu rỗng. FlatList có prop ListEmptyComponent cho việc này.

<FlatList
  data={articles}
  keyExtractor={(item) => item.id}
  renderItem={({ item }) => <ArticleItem article={item} />}
  ListEmptyComponent={
    <View style={{ padding: 24, alignItems: 'center' }}>
      <Text>Chưa có bài viết nào</Text>
    </View>
  }
/>

Loading state

Khi gọi API, bạn thường có loading. Nếu đang tải dữ liệu, có thể hiển thị ActivityIndicator trước khi render list.

if (loading) {
  return <ActivityIndicator style={{ flex: 1 }} />;
}

Khi danh sách đã có dữ liệu và bạn muốn kéo để refresh, hãy tìm hiểu thêm refreshing và onRefresh.

Header, footer và separator

FlatList còn có ListHeaderComponent, ListFooterComponent và ItemSeparatorComponent. Những prop này giúp bạn thêm tiêu đề, loading cuối danh sách hoặc đường phân cách mà không cần nhét logic vào từng item.

Lỗi thường gặp

Lỗi đầu tiên là dùng index làm key cho danh sách có thể thay đổi thứ tự. Lỗi thứ hai là render item quá nặng. Lỗi thứ ba là quên empty/loading state. Lỗi thứ tư là bọc FlatList trong ScrollView cùng chiều cuộn, dễ gây cảnh báo và vấn đề performance.

Kết luận

FlatList là kỹ năng rất thực tế trong React Native. Hãy bắt đầu từ data, renderItem, keyExtractor, sau đó thêm empty, loading, refresh và pagination khi app cần. Một màn hình list tốt thường là nền cho rất nhiều màn hình khác trong app.

Nguồn tham khảo: React Native: FlatList, ScrollView, ActivityIndicator.

SummarizeShare234
admin

admin

Related Stories

Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android Intent extra: thiếu dữ liệu khác với giá trị 0

by Suong Nguyen
01/11/2026
0

Kết hợp hasExtra, getIntExtra và kiểm tra phạm vi để phân biệt không truyền dữ liệu, giá trị hợp lệ bằng 0 và dữ liệu sai.

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

React Native useColorScheme: đổi theme mà không cache màu từ module

by Suong Nguyen
01/11/2026
0

Theo dõi thay đổi light/dark bằng useColorScheme, chọn fallback cho null và áp dụng màu trong render thay vì chụp một lần lúc import.

Minh hoạ component React Native như các khối giao diện tái sử dụng

React Native Pressable: tách phản hồi nhấn và hành động

by Suong Nguyen
31/10/2026
0

Dùng trạng thái pressed cho phản hồi giao diện, onPress cho thao tác và kiểm tra riêng nhấn giữ, hủy cử chỉ, vùng chạm.

Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android FileProvider: chia sẻ file cache bằng content URI

by Suong Nguyen
31/10/2026
0

Khai báo thư mục chia sẻ hẹp, tạo content URI và cấp quyền đọc tạm thời khi gửi một file qua Android Sharesheet.

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

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

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
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

  • React Native useColorScheme: đổi theme mà không cache màu từ module
  • Return trong finally có thể che cả return lẫn lỗi ban đầu
  • Android Intent extra: thiếu dữ liệu khác với giá trị 0

Categories

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

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.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply