From 011ea3306f02479b8003f519f7fc568a743b2019 Mon Sep 17 00:00:00 2001 From: Gaurav ROy <40909110+gauravroy1995@users.noreply.github.com> Date: Mon, 6 Feb 2023 00:56:53 -0800 Subject: [PATCH] fix(35280): added a fix to trigger on viewable items changed when null or 0 is passed in first element (#36009) Summary: Since currently the check was for null , and that too not === check. So added a check , only for item !== undefined, since null is an assigned value, and we can have null as values in the array for flatlist, undefined is in absence of any data, hence if its only undefined we should assign falsy to frame variable, since null is an assigned value, sometimes null can be passed to data in the dataset Hence added a check on top of Sam's previous commit to fix it UPDATE: Now after discussing with NickGerleman , removed the check for item with nullish/undefined. Now directly frames value is being controlled by _keyExtractor function This is already an issue [https://github.com/facebook/react-native/issues/35280](url) Currently in my project, even [0,1] -> didnt trigger onViewableItemsChanged since, it was considered as falsy value, went to check the node modules code for flatlist, debugged this. When pulled latest main branch, saw it was partially fixed , but for null as values it wasnt fixed. So added that check . ## Changelog [General] [Fixed] Fix VirtualizedList onViewableItemsChanged won't trigger if first item in data is null ``` const frame = item !== undefined ? this._frames[this._keyExtractor(item, index, props)] : undefined; ``` in place of existing which is ``` const frame = item != null ? this._frames[this._keyExtractor(item, index, props)] : undefined; ``` Update: `const frame = this._frames[this._keyExtractor(item, index, props)]` Finally this is the one used for getting frames value Reviewed By: NickGerleman Differential Revision: D42934757 Pulled By: skinsshark fbshipit-source-id: cb5622a79523bccbdfbc15470baf84422f635b33 --- Libraries/Lists/VirtualizedList.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js index 9d1d336ecc..2fad4637e6 100644 --- a/Libraries/Lists/VirtualizedList.js +++ b/Libraries/Lists/VirtualizedList.js @@ -1822,10 +1822,7 @@ export default class VirtualizedList extends StateSafePureComponent< 'Tried to get frame for out of range index ' + index, ); const item = getItem(data, index); - const frame = - item != null - ? this._frames[this._keyExtractor(item, index, props)] - : undefined; + const frame = this._frames[this._keyExtractor(item, index, props)]; if (!frame || frame.index !== index) { if (getItemLayout) { /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment