[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;
|
||||
}
|
||||
|
||||
- (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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue