Skip to content

Revisit batching of updates with useOnyx #571

Open
@hannojg

Description

@hannojg

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.connect
  • withOnyx

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:

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions