[ScrollView] Pick data from older event on coalescing.
Summary: The `ScrollView` sends important `updatedChildFrames` data to the `ListView` to be able to implement `onChangeVisibleRows` method. Coalescing operates very strongly on older devices like the iPhone 4s where this data is then lost. Fixes #1782. `ListView` has a method called `onChangeVisibleRows` that is called whenever the rows visible on screen change. This method is critical to be able to implement deletion/creation of views and hence be conservative in memory usage. I have an infinite scrolling view which uses this method to only render the full rows for what is visible on screen and put placeholders for everything else. In the `RCTEventDispatcher`, we [coalesce events](522fd33d6f/React/Base/RCTEventDispatcher.m (L135-L152)
) that are meant to be sent across the bridge. They are [dequeued](522fd33d6f/React/Base/RCTEventDispatcher.m (L180-L188)
) on each Closes https://github.com/facebook/react-native/pull/1783 Github Author: Param Aggarwal <paramaggarwal@gmail.com>
This commit is contained in:
parent
65027e8e29
commit
0f2d8e662e
|
@ -114,8 +114,16 @@ RCT_NOT_IMPLEMENTED(-init)
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id<RCTEvent>)coalesceWithEvent:(id<RCTEvent>)newEvent
|
- (RCTScrollEvent *)coalesceWithEvent:(RCTScrollEvent *)newEvent
|
||||||
{
|
{
|
||||||
|
NSArray *updatedChildFrames = [_userData[@"updatedChildFrames"] arrayByAddingObjectsFromArray:newEvent->_userData[@"updatedChildFrames"]];
|
||||||
|
|
||||||
|
if (updatedChildFrames) {
|
||||||
|
NSMutableDictionary *userData = [newEvent->_userData mutableCopy];
|
||||||
|
userData[@"updatedChildFrames"] = updatedChildFrames;
|
||||||
|
newEvent->_userData = userData;
|
||||||
|
}
|
||||||
|
|
||||||
return newEvent;
|
return newEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue