@amazon-devices/shopify__flash-listライブラリは、高速でパフォーマンスに優れたリストコンポーネントを提供します。FlashListは、React Nativeから提供されているFlatListに似ています。FlatListでサポートされるプロパティは、FlashListでもサポートされます。FlashListは、FlatListコンポーネントを置き換えてestimatedItemSizeプロパティを追加するだけで試すことができます。また、FlashListでは、サポートされるプロパティのリストが拡張され、最適なパフォーマンスの実現に役立つプロパティが追加されています。
このライブラリはシステムにデプロイされるため、別途インストールプロセスを必要とすることなくVega向けReact Nativeアプリで利用できます。ライブラリは自動リンクされており、アプリは実行時にリンクします。このライブラリは、そのライブラリがビルドされたVega向けReact Nativeのバージョンとのみ互換性があることが保証されています。
アプリのVega向けReact Nativeのバージョンをアップレベルするときは、ライブラリの依存関係をアップレベルするベストプラクティスを検討してください。
インストール
-
package.jsonファイルにJavaScriptライブラリの依存関係を追加します。 -
npm installコマンドを使用して、依存関係を再インストールします。
例
以下の例では、共通のデータセットとコンポーネントを使用します。重複を避けるために、例では一部のアイテムが削除されています。FlashListコンポーネントの例
無限スクロールのFlashListの例
MasonryFlashListの例
MasonryFlashListは、多数の列を持つFlashListコンポーネントです。
APIリファレンス
このライブラリとAPIリファレンスの詳細については、ドキュメントページを参照してください。FlashListライブラリは、FlatListコンポーネントでサポートされるすべてのプロパティに対応しています。また、以下に示すようにパフォーマンスを最適化するためのプロパティが追加されています。
コンポーネント
プロパティ
FlashListは、FlatListと同様に内部でScrollViewを使用しているため、そのプロパティを継承しています。
既知の問題と制限事項
React NativeのFlatListでサポートされているプロパティのすべてに、FlashListで同等のプロパティがあるとは限りません。React Nativeの以下のプロパティはFlashListではサポートされていません。
- サポートされていないプロパティ:
columnWrapperStyledebuglistKeyonScrollToIndexFailedwindowSize
- サポートされていないメソッド:
flashScrollIndicators()hasMoregetChildContextgetNativeScrollRef()getScrollRefgetScrollResponder()
- 基盤となる実装の違いにより、
FlashListに移植しても意味のないプロパティ:disableVirtualizationgetItemLayoutinitialNumToRendermaxToRenderPerBatchrecordInteractionsetNativePropsupdateCellsBatchingPeriod
- Vegaで現在サポートされていないプロパティ:
refreshControlrefreshing
ItemItemSeparatorComponentを使用する場合、スクロール時にJSスレッドで問題が発生することがあります。
keyプロパティの使用
keyプロパティを使用すると、FlashListでビューをリサイクルできなくなり、Flashlistのパフォーマンス最適化の効果が失われます。React NativeのFlatListからFlashlistに移行する場合は、アイテムコンポーネントとその入れ子のコンポーネントからkeyプロパティをすべて削除する必要があります。
たとえば、次のコードスニペットでは、TextコンポーネントとViewコンポーネントでkeyプロパティが使用されています。
Flashlistを最適化するには、次のようにkeyプロパティを削除します。
keyプロパティの詳細については、Shopifyのドキュメント(英語のみ)を参照してください。

