Skip to content

Reinitializing observer doesn't unobserve previous element #20

@jeron-diovis

Description

@jeron-diovis

If I understand intent correctly, observer should watch only for one node at a time, unobserving previous node if refCallback is re-invoked:

if (node) {
observer?.unobserve(node);
setEntry(undefined);
}

But refCallback updates node reference before invoking reinitializeObserver:

nodeRef.current = node;
reinitializeObserver();
return () => {
nodeRef.current = null;
reinitializeObserver();

So unobserve just never ever is called.

Demo: https://codesandbox.io/p/sandbox/s7mwhj
Check out console output. See how it logs visibility changes for all nodes, despite the fact same refCallback is used for all them – so only the last one should be observed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions