Phía máy chủ
Để cấu hình dữ liệu phân trang cho infinite scrolling, bạn nên dùng phương thứcInertia::scroll() khi trả response. Phương thức tự động cấu hình hành vi merge phù hợp và chuẩn hóa pagination metadata cho frontend component.
Inertia::scroll() hoạt động với các method paginate(), simplePaginate() và cursorPaginate() của Laravel, cũng như dữ liệu phân trang được bọc trong Eloquent API resource. Xem tài liệu method Inertia::scroll() để biết thêm.
Phía client
Ở phía client, Inertia cung cấp component<InfiniteScroll> để tự động tải thêm các trang nội dung. Component nhận prop data chỉ định key của prop chứa dữ liệu phân trang. Component <InfiniteScroll> cần bọc nội dung phụ thuộc vào dữ liệu này.
Loading buffer
Bạn có thể kiểm soát việc tải nội dung bắt đầu sớm đến mức nào bằng khoảng buffer. Buffer chỉ định số pixel trước cuối nội dung mà quá trình tải cần bắt đầu.Đồng bộ URL
Component infinite scroll cập nhật query string URL của trình duyệt (?page=...) khi người dùng cuộn qua nội dung. URL phản ánh trang có nhiều item hiển thị nhất trên màn hình và cập nhật theo cả hai hướng khi cuộn lên hoặc xuống. Nhờ đó người dùng có thể bookmark hoặc chia sẻ liên kết đến trang cụ thể. Bạn có thể tắt hành vi này để giữ nguyên URL ban đầu.
Reset
Khi filter hoặc tham số khác thay đổi, bạn có thể cần reset dữ liệu infinite scroll để bắt đầu lại từ đầu. Nếu không reset, kết quả mới sẽ merge với nội dung hiện tại thay vì thay thế. Bạn có thể reset dữ liệu bằng visit optionreset.
Hướng tải dữ liệu
Component infinite scroll tải nội dung theo cả hai hướng khi bạn cuộn gần đầu hoặc cuối. Bạn có thể kiểm soát bằng các proponly-next và only-previous.
Reverse mode
Với ứng dụng chat, timeline hoặc giao diện có nội dung sắp xếp giảm dần (item mới nhất ở dưới cùng), bạn có thể bật reverse mode. Chế độ này cấu hình component tải nội dung cũ hơn khi cuộn lên.:auto-scroll="false".
Manual mode
Manual mode tắt tự động tải khi cuộn và cho phép bạn kiểm soát thời điểm tải nội dung qua slotnext và previous. Để biết chi tiết property slot và option tùy chỉnh, xem Slots.
manualAfter.
Slots
Component infinite scroll cung cấp nhiều slot để tùy chỉnh trải nghiệm loading. Các slot cho phép hiển thị loading indicator tùy chỉnh và tạo control tải thủ công. Mỗi slot nhận property cung cấp thông tin trạng thái loading và function kích hoạt tải nội dung.Default slot
Khu vực nội dung chính nơi bạn render item dữ liệu. Slot này nhận thông tin trạng thái loading.Loading slot
Loading slot được dùng làm fallback khi đang tải nội dung và không có custom slotbefore hoặc after. Nó tạo loading indicator mặc định.
Slot Previous và Next
Slotprevious và next được render phía trên và dưới nội dung chính, thường dùng làm control tải thủ công. Các slot nhận nhiều property gồm trạng thái loading, function fetch và chỉ báo mode.
loading, previous và next nhận những property sau:
Custom element
ComponentInfiniteScroll render dưới dạng phần tử <div>. Bạn có thể tùy chỉnh thành bất kỳ element HTML nào bằng prop as.
Target element
Component infinite scroll tự động theo dõi nội dung và gán số trang cho element để đồng bộ URL. Khi item dữ liệu không phải child trực tiếp của root element của component, bạn cần chỉ định element thực sự chứa item bằng propitemsElement.
#table-body và tự động gắn số trang cho từng <tr> khi nội dung mới được tải. Điều này cho phép URL cập nhật chính xác dựa trên nội dung của trang nào đang hiển thị nhiều nhất trong viewport.
Bạn cũng có thể chỉ định custom trigger element để tải thêm nội dung bằng CSS selector. Khi đó các trigger element mặc định sẽ không được render và Intersection Observer sẽ theo dõi custom element thay thế.
Scroll container
Component infinite scroll hoạt động trong bất kỳ container có thể cuộn nào, không chỉ document chính. Component tự động thích nghi để dùng custom scroll container cho việc phát hiện trigger và tính toán thay cho scroll của document chính.Nhiều scroll container
Đôi khi bạn cần render nhiều component infinite scroll trên cùng một trang. Tuy nhiên, nếu cả hai đều dùng query parameterpage mặc định để đồng bộ URL, chúng sẽ xung đột. Để giải quyết, hãy yêu cầu mỗi paginator dùng pageName riêng.
Inertia::scroll() tự động phát hiện pageName từ từng paginator, cho phép các scroll container duy trì pagination state độc lập. Kết quả URL sẽ có dạng ?users=2&orders=3 thay vì xung đột ở parameter ?page=.
Để biết thêm về page name của pagination, xem tài liệu Laravel.
Truy cập bằng code
Khi cần kích hoạt action tải dữ liệu bằng code, bạn có thể dùng template ref.fetchNext()- Chủ động lấy trang tiếp theofetchPrevious()- Chủ động lấy trang trướchasNext()- Có trang tiếp theo hay khônghasPrevious()- Có trang trước hay không
Method Inertia::scroll()
Phương thứcInertia::scroll() cung cấp cấu hình phía server cho infinite scrolling. Nó tự động cấu hình merge để dữ liệu mới được append hoặc prepend vào nội dung hiện có thay vì thay thế, đồng thời chuẩn hóa pagination metadata cho frontend component.
scroll() hỗ trợ.
ProvidesScrollMetadata hoặc callback trả về instance đó. Callback nhận tham số $data. Điều này hữu ích khi tích hợp thư viện pagination bên thứ ba như Fractal.