ReactJS: So sánh @loadable/component với React.lazy
Sự khác biệt giữa React.lazy và @loadable/component là gì?
React.lazy là giải pháp được đề xuất cho việc tách mã. Nó sử dụng Suspense và nó được duy trì bởi React.
Nếu bạn đã sử dụng React.lazy và nếu nó đang hoạt động tốt, bạn không cần @loadable/component.
Nếu bạn cảm thấy hạn chế hoặc nếu bạn cần SSR, thì @loadable/component là giải pháp.
Bảng so sánh
| Thư viện | Suspese | SSR | Tách thư viện | import(`./${value}`) |
|---|---|---|---|---|
React.lazy |
✅ | ❌ | ❌ | ❌ |
@loadable/component |
✅ | ✅ | ✅ | ✅ |
Suspense
Hồi hộp được hỗ trợ bởi React.lazy và bởi @loadable/component. @loadable/component cũng có thể được sử dụng mà không cần Suspense.
Kết xuất phía máy chủ (Server Side Rendering - SSR)
Suspense không khả dụng ở phía máy chủ và React.lazy chỉ có thể hoạt động với Suspense. Đó là lý do tại sao hiện tại React.lazy không phải là một tùy chọn nếu bạn cần Kết xuất Phía Máy chủ.
@loadable/component cung cấp một giải pháp hoàn chỉnh để giúp Server Side Rendering có thể thực hiện được.
Tách thư viện
@loadable/component hỗ trợ chia nhỏ thư viện bằng cách sử dụng các prop kết xuất. Điều này là không thể với React.lazy.
import full động
Import full động hay còn gọi là tách mã linh hoạt là một tính năng được hỗ trợ bởi Webpack. Nó bao gồm việc truyền một giá trị động cho hàm động import().
// Tất cả các file tương thích với mẫu này sẽ tự động được tách mã. const loadFile = file => import(`./${file}`)
Trong React, @loadable/component cho phép tạo các component có thể sử dụng lại:
import loadable from '@loadable/component' const AsyncPage = loadable(props => import(`./${props.page}`)) function MyComponent() { return ( <div> <AsyncPage page="Home" /> <AsyncPage page="Contact" /> </div> ) }
Tính năng này không được hỗ trợ bởi React.lazy.
Lưu ý về react-loadable
react-loadable là cách được khuyến nghị để tách mã React trong một thời gian dài. Tuy nhiên, ngày nay nó không được bảo trì nữa và nó không tương thích với Webpack v4 + và Babel v7 +.
Nếu bạn sử dụng nó, bạn nên chuyển sang React.lazy hoặc @loadable/component.