Exposing a curated imperative API from a component.
01
01
Understand the problem
reactrefspatterns
02
02
Attempt it yourself
Sketch your approach before reading the solution — that's what interviews test.
Stuck? AI Nudge Available
Get a conceptual hint to guide your logic without spoiling the final implementation.
03
03
Study the solution
The solution is waiting
Give it an honest attempt first — then compare your thinking with the full walkthrough.
04
04
Explore the playground snippets
Exposing a curated imperative API
Run Playgroundimport { forwardRef, useRef, useImperativeHandle } from 'react';
const FancyInput = forwardRef(function FancyInput(props, ref) {
const inputRef = useRef(null);
useImperativeHandle(ref, () => ({
focus: () => inputRef.current.focus(),
clear: () => { inputRef.current.value = ''; },
}));
return <input ref={inputRef} placeholder="Controlled imperatively" {...props} />;
});
export default function App() {
const api = useRef(null);
return (
<div style={{ fontFamily: 'sans-serif', padding: 24 }}>
<FancyInput ref={api} />
<div style={{ marginTop: 8 }}>
<button onClick={() => api.current.focus()}>Focus</button>{' '}
<button onClick={() => api.current.clear()}>Clear</button>
</div>
</div>
);
}05
05
Join the discussion
Discussion (0)
Sign in to join the discussion.
No responses yet. Be the first to share what you think.