R
Interview Deckreact · next.js · senior/staff
0·0·122
Hooks

useRef & forwardRef

useRef retorna ref mutável que persiste entre renders. forwardRef expõe ref a componentes pai.

useRef cria um objeto { current: ... } que persiste entre renders sem causar re-render quando alterado. Usado para: 1) Acessar elementos DOM. 2) Guardar valores mutáveis (timers, instâncias). forwardRef permite que componentes funcionais recebam refs do pai.

Problema
Precisa acessar um elemento DOM (focar input, scroll, medir). Ou guardar valor que muda mas não deve causar re-render.
Solução
useRef para refs locais. forwardRef para expor refs internas a componentes pais. ref.current é mutável e não dispara re-render.
Tip
Mudar ref.current NÃO causa re-render. Se precisa que UI atualize quando o valor muda, use useState.
// useRef + forwardRef
const Input = forwardRef((props, ref) => {
  return <input ref={ref} {...props} />;
});

function Form() {
  const inputRef = useRef(null);

  const handleClick = () => {
    inputRef.current.focus(); // acesso direto ao DOM
  };

  return (
    <>
      <Input ref={inputRef} />
      <button onClick={handleClick}>Focar</button>
    </>
  );
}
Q.useRef vs useState — quando usar cada?
A.useRef: valores que não afetam a renderização (timers, contadores internos, refs DOM). useState: valores que, quando mudam, devem re-renderizar a UI.
Q.O que é forwardRef?
A.Por padrão, refs não passam para componentes funcionais (props.ref é undefined). forwardRef envolve o componente para receber e repassar refs. Necessário para componentes de biblioteca (Button, Input, etc).
Q.useImperativeHandle — para que serve?
A.Customiza o que o ref do componente expõe ao pai. Em vez de expor o DOM bruto, você expõe métodos específicos (focus, scrollIntoView, validate). Melhora encapsulamento.
25/122← →