Veo que React.forwardRef parece ser la forma autorizada de pasar una referencia a un componente funcional secundario, desde los documentos de reacción:
const FancyButton = React.forwardRef((props, ref) => (
<button ref={ref} className="FancyButton">
{props.children}
</button>
));
// You can now get a ref directly to the DOM button:
const ref = React.createRef();
<FancyButton ref={ref}>Click me!</FancyButton>;
Sin embargo, ¿cuál es la ventaja de hacer esto sobre simplemente pasar un accesorio personalizado ?:
const FancyButton = ({ innerRef }) => (
<button ref={innerRef} className="FancyButton">
{props.children}
</button>
));
const ref = React.createRef();
<FancyButton innerRef={ref}>Click me!</FancyButton>;
La única ventaja que se me ocurre es que quizás tenga una API constante para los árbitros, pero ¿hay alguna otra ventaja? ¿Pasar un accesorio personalizado afecta la diferencia cuando se trata de renderizar y causa renders adicionales, seguramente no porque la referencia se almacena como estado mutable en el current
campo?
Digamos, por ejemplo, que desea pasar varias referencias (que tbh, podría indicar olor a código, pero aún así), entonces la única solución que puedo ver sería usar accesorios customRef.
Supongo que mi pregunta es ¿cuál es el valor de usar forwardRef
sobre un accesorio personalizado?
fuente
Ref
Es una propiedad estándar enReact
componentes.Algunos componentes que envuelven otros componentes para proporcionar funcionalidad adicional, se usan
ref
para referirse al componente envuelto y esperan que el componente tengaref
propiedad.Es mejor que un componente tenga el
ref
propiedad de ser compatible con otros componentes y bibliotecas.Los componentes de la función no pueden tener la propiedad "ref" y deben usar
forwardRef
en lugar para proporcionar laref
propiedad.fuente