JuniorKỹ thuậtReact Native
Làm sao để hiển thị một danh sách dài mượt mà trên di động?
Thử trả lời trước
Đáp án mẫu
Đừng bao giờ render toàn bộ các dòng cùng lúc bằng ScrollView và map. Hãy dùng danh sách ảo hoá (virtualized list) chỉ mount các dòng gần vùng nhìn thấy.
Trong React Native, đó là FlatList, hoặc FlashList để tái sử dụng view tốt hơn.
Mẹo tinh chỉnh
- Dùng
keyExtractorổn định (id của item, không phải index). - Giữ mỗi dòng nhẹ: bọc bằng
React.memovà tránh tạo hàm hay style inline mới cho từng dòng. - Cung cấp
getItemLayouthoặc chiều cao cố định khi biết trước kích thước dòng, để danh sách khỏi phải đo. - Điều chỉnh
windowSize,initialNumToRendervàmaxToRenderPerBatchtheo nội dung của bạn. - Dùng ảnh đúng kích thước và có cache, vì ảnh lớn là nguyên nhân phổ biến gây giật.
- Phân trang bằng
onEndReached, tránh tải hàng nghìn item.
Hãy kiểm chứng bằng performance monitor hoặc profiler trên thiết bị tầm trung thật, không chỉ trên simulator.
Ý chính
- Dùng danh sách ảo hoá (FlatList hoặc FlashList), không dùng ScrollView với map
- Key ổn định và các dòng nhẹ, được memo
- getItemLayout và tinh chỉnh window giúp giảm việc phải làm
- Tối ưu ảnh và phân trang dữ liệu
Câu hỏi nối tiếp thường gặp
- FlashList khác FlatList như thế nào?
- Bạn tìm ra dòng nào gây rớt frame như thế nào?
Lỗi thường gặp
- Dùng index mảng làm key cho danh sách có thay đổi
- Chỉ kiểm tra hiệu năng trên simulator hoặc điện thoại cao cấp