Vejo que React.forwardRef parece ser a maneira sancionada de passar um ref para um componente funcional filho, a partir dos documentos de reação:
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>;
No entanto, qual é a vantagem de fazer isso ao simplesmente passar um suporte personalizado ?:
const FancyButton = ({ innerRef }) => (
<button ref={innerRef} className="FancyButton">
{props.children}
</button>
));
const ref = React.createRef();
<FancyButton innerRef={ref}>Click me!</FancyButton>;
A única vantagem em que consigo pensar é talvez ter uma API consistente para refs, mas existe alguma outra vantagem? A aprovação de uma proposta personalizada afeta a diferença quando se trata de renderização e causa renderizações adicionais, certamente não, pois o ref é armazenado como estado mutável no current
campo?
Digamos, por exemplo, que você desejasse passar várias referências (o que tbh pode indicar cheiro de código, mas ainda assim), a única solução que posso ver seria usar adereços customRef.
Acho que minha pergunta é qual é o valor de usar forwardRef
sobre um suporte personalizado?
fonte
Ref
é uma propriedade padrão emReact
componentes.Alguns componentes que envolvem outros componentes para fornecer funcionalidade adicional, usam
ref
para se referir ao componente agrupado e esperam que o componente tenharef
propriedade.É melhor que um componente tenha a
ref
propriedade para ser compatível com outros componentes e bibliotecas.Os componentes de função não podem ter a propriedade "ref" e devem ser usados
forwardRef
para fornecerref
propriedade.fonte