Widzę, że React.forwardRef wydaje się być usankcjonowanym sposobem przekazywania referencji do potomnego komponentu funkcjonalnego, z dokumentów reakcji:
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>;
Jaka jest jednak zaleta robienia tego w porównaniu do zwykłego rekwizytu ?:
const FancyButton = ({ innerRef }) => (
<button ref={innerRef} className="FancyButton">
{props.children}
</button>
));
const ref = React.createRef();
<FancyButton innerRef={ref}>Click me!</FancyButton>;
Jedyną zaletą, jaką mogę wymyślić, może mieć spójny interfejs API dla referencji, ale czy jest jakaś inna zaleta? Czy przekazanie niestandardowego rekwizytu wpływa na różnice w renderowaniu i powoduje dodatkowe renderowanie, na pewno nie, ponieważ ref jest przechowywany jako zmienny stan w current
polu?
Powiedzmy na przykład, że chcesz przekazać wiele referencji (które tbh mogą wskazywać na zapach kodu, ale nadal), wtedy jedynym rozwiązaniem, jakie widzę, byłoby użycie rekwizytów customRef.
Myślę, że moje pytanie brzmi: jaka jest wartość używania forwardRef
niestandardowego rekwizytu?
źródło
Ref
jest standardową właściwościąReact
komponentów.Niektóre komponenty, które zawijają inne komponenty w celu zapewnienia dodatkowej funkcjonalności, służą
ref
do odwoływania się do opakowanego komponentu i oczekują, że komponent maref
właściwość.Lepiej jest, aby składnik
ref
był zgodny z innymi składnikami i bibliotekami.Komponenty funkcji nie mogą mieć właściwości „ref” i
forwardRef
zamiast tego muszą używaćref
właściwości.źródło