Je vois que React.forwardRef semble être le moyen approuvé de passer une référence à un composant fonctionnel enfant, à partir des documents React:
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>;
Cependant, quel est l'avantage de faire cela en passant simplement un accessoire personnalisé?:
const FancyButton = ({ innerRef }) => (
<button ref={innerRef} className="FancyButton">
{props.children}
</button>
));
const ref = React.createRef();
<FancyButton innerRef={ref}>Click me!</FancyButton>;
Le seul avantage auquel je peux penser est peut-être d'avoir une API cohérente pour les références, mais y a-t-il un autre avantage? Le passage d'un accessoire personnalisé affecte-t-il la différence en ce qui concerne le rendu et provoque-t-il des rendus supplémentaires, sûrement pas car la référence est stockée comme état modifiable dans le current
champ?
Supposons par exemple que vous vouliez passer plusieurs références (dont tbh, pourrait indiquer une odeur de code, mais quand même), alors la seule solution que je peux voir serait d'utiliser des accessoires customRef.
Je suppose que ma question est quelle est la valeur de l'utilisation par forwardRef
rapport à un accessoire personnalisé?
la source
Ref
est une propriété standard desReact
composants.Certains composants qui encapsulent d'autres composants pour fournir des fonctionnalités supplémentaires, utilisent
ref
pour faire référence au composant encapsulé et s'attendent à ce que le composant ait uneref
propriété.Il est préférable qu'un composant ait la
ref
propriété d'être compatible avec d'autres composants et bibliothèques.Les composants de fonction ne peuvent pas avoir la propriété "ref" et doivent utiliser à la
forwardRef
place pour fournir laref
propriété.la source