hardFrontend

When and why do you use `forwardRef` with `useImperativeHandle`?

662 views
01

Understand the problem

Exposing a curated imperative API from a component.

reactrefspatterns
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

Study the solution

The solution is waiting

Give it an honest attempt first — then compare your thinking with the full walkthrough.

04

Explore the playground snippets

Exposing a curated imperative API
Run Playground
import { 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

Join the discussion

Discussion (0)

Sign in to join the discussion.

No responses yet. Be the first to share what you think.