From 91bda43e56645749f7c7fdc1b05afff12ff5cb82 Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Mon, 13 Feb 2017 18:10:06 -0800 Subject: [PATCH] Fix `getItemLayout` flow type to include `index` Summary: The index is used to make sure the layout corresponds to the correct index, which can get out of sync if cell layout is cached and then cells are re-ordered. Reviewed By: bvaughn Differential Revision: D4554721 fbshipit-source-id: 9acb37f390a6e40ad89f813b78f81b399ec11e9a --- Examples/UIExplorer/js/MultiColumnExample.js | 2 +- Libraries/Experimental/FlatList.js | 5 +++-- Libraries/Experimental/VirtualizedList.js | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Examples/UIExplorer/js/MultiColumnExample.js b/Examples/UIExplorer/js/MultiColumnExample.js index 256271ecae..14f6739791 100644 --- a/Examples/UIExplorer/js/MultiColumnExample.js +++ b/Examples/UIExplorer/js/MultiColumnExample.js @@ -114,7 +114,7 @@ class MultiColumnExample extends React.PureComponent { ); } - _getItemLayout(data: any, index: number): {length: number, offset: number} { + _getItemLayout(data: any, index: number): {length: number, offset: number, index: number} { return getItemLayout(data, index); } _renderItemComponent = ({item}) => { diff --git a/Libraries/Experimental/FlatList.js b/Libraries/Experimental/FlatList.js index c7cdafa177..92f43cf5bd 100644 --- a/Libraries/Experimental/FlatList.js +++ b/Libraries/Experimental/FlatList.js @@ -74,12 +74,13 @@ type OptionalProps = { * you know the height of items a priori. getItemLayout is the most efficient, and is easy to use * if you have fixed height items, for example: * - * getItemLayout={(data, index) => ({length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index})} + * getItemLayout={(data, index) => ({length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index, index})} * * Remember to include separator length (height or width) in your offset calculation if you * specify `SeparatorComponent`. */ - getItemLayout?: (data: ?Array, index: number) => {length: number, offset: number}, + getItemLayout?: (data: ?Array, index: number) => + {length: number, offset: number, index: number}, /** * If true, renders items next to each other horizontally instead of stacked vertically. */ diff --git a/Libraries/Experimental/VirtualizedList.js b/Libraries/Experimental/VirtualizedList.js index 660fe730f5..6659e383dd 100644 --- a/Libraries/Experimental/VirtualizedList.js +++ b/Libraries/Experimental/VirtualizedList.js @@ -87,7 +87,8 @@ type OptionalProps = { disableVirtualization: boolean, getItem: (items: any, index: number) => ?Item, getItemCount: (items: any) => number, - getItemLayout?: (items: any, index: number) => {length: number, offset: number}, // e.g. height, y + getItemLayout?: (items: any, index: number) => + {length: number, offset: number, index: number}, // e.g. height, y horizontal: boolean, initialNumToRender: number, keyExtractor: (item: Item, index: number) => string,