Created
May 27, 2022 21:25
-
-
Save MarekZeman91/04619e2700f6361ad3c9d469a1be3100 to your computer and use it in GitHub Desktop.
How to forward custom ref
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
import { createRef, ForwardedRef, forwardRef, useImperativeHandle, useRef } from 'react'; | |
interface ForwardedHandlers<T> { | |
getValue(): T; | |
} | |
interface ForwardedProps<T> { | |
value: T; | |
children?: never; | |
} | |
const ForwardedFn = <T extends string>( | |
props: ForwardedProps<T>, | |
ref: ForwardedRef<ForwardedHandlers<T>> | |
) => { | |
const inputRef = useRef<HTMLInputElement>(); | |
useImperativeHandle(ref, () => ({ | |
getValue: () => inputRef.current?.value as T, | |
})); | |
return <input defaultValue={ props.value } ref={ inputRef }/>; | |
}; | |
export const Forwarded = forwardRef(ForwardedFn) as <T extends any>( | |
props: ForwardedProps<T> & { ref?: ForwardedRef<ForwardedHandlers<T>> } | |
) => ReturnType<typeof ForwardedFn>; | |
const ref = createRef<ForwardedHandlers<string>>(); | |
const cmp = <Forwarded<string> value="Lorem ipsum"/>; | |
const value = ref.current.getValue(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment