Nos permite definir qué propiedades y métodos queremos que sean accesibles desde el componente padre.
En el siguiente ejemplo vamos a crear un componente TextInput
que tiene un método focus
que cambia el foco al elemento <input>
.
import { useRef, useImperativeHandle } from 'react'
function TextInput(props, ref) {
const inputEl = useRef(null)
useImperativeHandle(ref, () => ({
focus: () => {
inputEl.current.focus()
}
}))
return (
<input ref={inputEl} type="text" />
)
}
Creamos una referencia inputEl
con useRef
y la pasamos al elemento <input>
como prop ref
. Cuando el componente se monta, la referencia inputEl
apunta al elemento <input>
del DOM.
Para acceder al elemento del DOM, usamos la propiedad current
de la referencia.
Para que el componente padre pueda acceder al método focus
, usamos el hook useImperativeHandle
. Este hook recibe dos parámetros: una referencia y una función que devuelve un objeto con las propiedades y métodos que queremos que sean accesibles desde el componente padre.