[@mantine/hooks] use-scroll-spy: Accept a ref object for scrollHost option#9031
Open
Hossam-Ismail wants to merge 1 commit into
Open
[@mantine/hooks] use-scroll-spy: Accept a ref object for scrollHost option#9031Hossam-Ismail wants to merge 1 commit into
Hossam-Ismail wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #9025
Currently
useScrollSpy'sscrollHostoption only accepts a resolvedHTMLElement. The idiomatic way to obtain a DOM node in React is a ref, but a ref's.currentisundefinedon first render, so users have to convert the element into state via a callback ref just to make the hook re-initialize once the host exists:This change lets
scrollHostaccept either a resolved element or a ref object, collapsing the usage to the natural form:Because the listener is attached inside
useEffect(which runs after the DOM is committed),ref.currentis already populated by the time the host is resolved, so no extra state/re-render is required. This mirrors the existing pattern of other hooks such asuse-scroll-into-view, which already accept aRefObject.Changes
scrollHosttype toHTMLElement | RefObject<HTMLElement | null>..currentinside the effect when a ref object is passed; fall back towindowwhen the resolved host isnull/undefined(unchanged behavior for the existingHTMLElementand no-arg cases).Tests
Added
use-scroll-spy.test.tscovering: defaultwindowhost, a resolvedHTMLElementhost, a ref-object host, and a ref whosecurrentisnull(falls back towindow).