Skip to content

[BUG] The content and activeAnchor arguments in the render cb do not always refer to the same element #1138

Closed

Description

@RedForest347

Bug description
I render the contents of the tooltip using the render prop of the Tooltip component
when quickly moving the cursor between two elements, situations arise when activeAnchor argument refers to one element and content argument contains data-tooltip-content from another element.

Version of Package
v5.25.0

To Reproduce
I used an example from here: https://github.com/ReactTooltip/react-tooltip/blob/master/docs/docs/examples/render.mdx

I only changed props of the Tooltip component:

<Tooltip
    id="my-tooltip"
    // delayShow={500}
    // delayHide={20}
    render={({ content, activeAnchor }) => {
        console.log('activeAnchor', activeAnchor, 'content', content);
        return (
            <span>
                {`The element #${content} is currently active.`}
                <br />
                Relevant attribute:
                {activeAnchor?.getAttribute('data-some-relevant-attr') || 'not set'}
                {content == 1 ? <><br />ddd</> : ''}
            </span>
        );
    }}
/>

Expected behavior
the data-tooltip-content attribute of the activeAnchor prop should be the same as the content prop

Screenshots
image

Desktop (please complete the following information if possible or delete this section):

  • OS: Windows 10 19045.3803
  • Browser chrome
  • Version 120.0.6099.110
  • Frameworks React 18.2.0

Activity

  1. gabrieljablonski commented on Dec 15, 2023

    @gabrieljablonski
    Member

    Is this something that's very noticeable from a user perspective? My guess is that's happening only for a few frames, so barely visible. If that's not the case, and it's in fact noticeable, please provide a reproducible sample, since I've been unable to do reproduce it myself.

    In case my assessment is correct, this is something we can't realistically fix right now, since it's due to a design limitation on how the tooltip handles its internal state, and it doesn't impact user experience. As you've noticed from the logs, there are basically 2 render cycles here: first the active anchor changes, and then the other internal states (such as the content) are updated according to it on the next cycle.

    I'll leave this open for now, but it should be noted it is closely related to #1010, since the issue there (position and open state synchronization) is also due to how the internal state is handled.

    We plan to address this design problem in the near future with v6, so hopefully this will also be fixed alongside #1010.


    Thanks for reporting, and please let us know if you've actually come up with a situation where this issue is noticeable for the user.

  2. RedForest347 commented on Dec 16, 2023

    @RedForest347
    Author

    yes, you're right. the error may be related to this topic.

    This bug occurs for 1-2 frames and is only noticeable if the height of tooltips for elements is different. in my example it is the left and middle element. I made a simple repository that you can use to reproduce this bug. I hope it will be useful to you. node js version 18.17.1.

    a screenshot of how the user sees it
    image

    An interesting detail. when I customized the example, I first used react version 17.0.2. it doesn't show this bug visually. I created a separate branch to reproduce it.

    thank you for your reply

  3. gabrieljablonski commented on Dec 16, 2023

    @gabrieljablonski
    Member

    Yep, definitely noticeable when the height changes. This is something we'll keep in mind when working on the design changes for V6.

    Though there's something interesting I suggest you try. Does it still happen with the browser dev tools closed? On my computer, with the dev tools closed, I haven't been able to reproduce the bug visually, but if happens every time with it open.

    My guess is that the dev tools introduce some performance overhead, so it ends up "lagging" the tooltip a bit. It's worth testing if maybe your application won't be affected by this on a production build.

    Still, this is definitely something we're aiming to fix.

  4. RedForest347 commented on Dec 18, 2023

    @RedForest347
    Author

    It's true, the bug is not observed visually with the closed dev tools. On a production build with open dev tools the error is also observed.

    Very strange behavior...

  5. added
    V6It might get fixed/merged before, but most likely only on V6's release.
    on Dec 27, 2023
  6. johannkor commented on Dec 28, 2023

    @johannkor
    Contributor

    If you log the props, you can see that activeAnchor get setState'd one render before content does, so it really does change before. If you use data-tooltip-content, you can keep them in sync by just not reading content and reading the dataset value from the anchor itself, when using render:

    <Tooltip
        render={({ activeAnchor }) => activeAnchor && <span>{activeAnchor?.dataset['tooltipContent']}</span>}
        ....
    />`
  7. RedForest347 commented on Dec 29, 2023

    @RedForest347
    Author

    unfortunately, when using the developer tools, the tooltip height bug is noticeable even when using your variant

  8. gabrieljablonski commented on Feb 10, 2024

    @gabrieljablonski
    Member

    Fixed on official release react-tooltip@5.26.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugV6It might get fixed/merged before, but most likely only on V6's release.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions