-
Notifications
You must be signed in to change notification settings - Fork 86
Description
In this PR:
We added support for batching updates, so that react only has to commit one big update, instead of updating every component separately. Back then there were only two subscription mechanisms:
Onyx.connectwithOnyx
Right now, we only batch updates for withOnyx. The reason for that is that in the NewDot code we have a lot of places that do Onyx.connect outside of react and immediately expect data. So we only wanted to batch withOnyx updates, as these were only used with react:
react-native-onyx/lib/OnyxUtils.ts
Lines 1004 to 1013 in c53826b
| function scheduleSubscriberUpdate<TKey extends OnyxKey>( | |
| key: TKey, | |
| value: OnyxValue<TKey>, | |
| previousValue: OnyxValue<TKey>, | |
| canUpdateSubscriber: (subscriber?: Mapping<OnyxKey>) => boolean = () => true, | |
| ): Promise<void> { | |
| const promise = Promise.resolve().then(() => keyChanged(key, value, previousValue, canUpdateSubscriber, true, false)); | |
| batchUpdates(() => keyChanged(key, value, previousValue, canUpdateSubscriber, false, true)); | |
| return Promise.all([maybeFlushBatchUpdates(), promise]).then(() => undefined); | |
| } |
Now we have useOnyx, which internally uses Onyx.connect, not withOnyx. So all components using useOnyx might not be batched.
I opened this issue because I want to look closer, if we need to enable a certain batching logic when using the useOnyx hook.