Files
react-native/Libraries
Nick Gerleman 6c5088f763 Make FlatList permissive of ArrayLike data (#36236)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/36236

D38198351 (https://github.com/facebook/react-native/commit/d574ea3526e713eae2c6e20c7a68fa66ff4ad7d2) addedd a guard to FlatList, to no-op if passed `data` that was not an array. This broke functionality where Realm had documented using `Realm.Results` with FlatList. `Real.Results` is an array-like JSI object, but not actually an array, and fails any `Array.isArray()` checks.

This change loosens the FlatList contract, to explicitly allow array-like non-array entities. The requirement align to Flow `ArrayLike`, which allows both arrays, and objects which provide a length and indexer. Flow `$ArrayLike` currently also requires an iterator, but this is seemingly a mistake in the type definition, and not enforced.

Though `Realm.Results` has all the methods of TS `ReadonlyArray`, RN has generally assumes its array inputs will pass `Array.isArray()`. This includes any array props still being checked [via prop-types](https://github.com/facebook/prop-types/blob/044efd7a108556c7660f6b62092756666e39d74b/factoryWithTypeCheckers.js#L548).

This change intentionally does not yet change the parameter type of `getItemLayout()`, which is already too loose (allowing mutable arrays). Changing this is a breaking change, that would be disruptive to backport, so we separate it into a different commit that will be landed as part of 0.72 (see next diff in the stack).

Changelog:
[General][Changed] - Make FlatList permissive of ArrayLike data

Reviewed By: yungsters

Differential Revision: D43465654

fbshipit-source-id: 3ed8c76c15da680560d7639b7cc43272f3e46ac3
2023-03-06 15:58:41 +00:00
..
2022-09-30 14:28:48 -07:00
2022-09-30 14:28:48 -07:00
2023-02-14 12:25:11 +00:00
2022-09-30 14:28:48 -07:00
2022-09-30 14:28:48 -07:00
2022-10-28 11:53:51 -07:00
2022-09-30 14:28:48 -07:00
2022-09-30 14:28:48 -07:00
2022-09-30 14:28:48 -07:00
2022-09-30 14:28:48 -07:00
2022-09-30 14:28:48 -07:00
2022-09-30 14:28:48 -07:00
2022-11-02 14:58:37 -07:00
2022-09-30 14:28:48 -07:00