Zanim przejdę do szczegółów na temat uzyskiwania dostępu do stanu elementu potomnego, przeczytaj odpowiedź Markusa-ipse dotyczącą lepszego rozwiązania tego konkretnego scenariusza.
Jeśli rzeczywiście chcesz uzyskać dostęp do stanu elementów potomnych komponentu, możesz przypisać właściwość wywoływaną ref
dla każdego elementu potomnego. Istnieją teraz dwa sposoby implementacji referencji: Korzystanie z referencji React.createRef()
i wywołanie zwrotne.
Za pomocą React.createRef()
Jest to obecnie zalecany sposób używania referencji od React 16.3 ( Więcej informacji można znaleźć w dokumentacji ). Jeśli używasz wcześniejszej wersji, zapoznaj się z poniższymi informacjami na temat odwołań zwrotnych.
Musisz utworzyć nowe odwołanie w konstruktorze komponentu nadrzędnego, a następnie przypisać je do elementu podrzędnego za pomocą ref
atrybutu.
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Aby uzyskać dostęp do tego rodzaju referencji, musisz użyć:
const currentFieldEditor1 = this.FieldEditor1.current;
Zwróci to instancję zamontowanego komponentu, abyś mógł następnie użyć, currentFieldEditor1.state
aby uzyskać dostęp do stanu.
Krótka uwaga, aby powiedzieć, że jeśli użyjesz tych odniesień w węźle DOM zamiast w komponencie (np. <div ref={this.divRef} />
), Wówczas this.divRef.current
zwróci podstawowy element DOM zamiast instancji komponentu.
Oddzwanianie
Ta właściwość przyjmuje funkcję wywołania zwrotnego, która jest przekazywana do dołączonego komponentu. To wywołanie zwrotne jest wykonywane natychmiast po zamontowaniu lub odmontowaniu komponentu.
Na przykład:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
W tych przykładach odwołanie jest przechowywane w komponencie nadrzędnym. Aby wywołać ten składnik w kodzie, możesz użyć:
this.fieldEditor1
a następnie użyj, this.fieldEditor1.state
aby uzyskać stan.
Należy zwrócić uwagę na jedną rzecz: upewnij się, że komponent potomny jest renderowany, zanim spróbujesz uzyskać do niego dostęp ^ ^ ^
Jak wyżej, jeśli użyjesz tych odniesień w węźle DOM zamiast w komponencie (np. <div ref={(divRef) => {this.myDiv = divRef;}} />
), Wówczas this.divRef
zwróci podstawowy element DOM zamiast instancji komponentu.
Dalsza informacja
Jeśli chcesz dowiedzieć się więcej o nieruchomości referencyjnej React, sprawdź tę stronę na Facebooku.
Upewnij się, że przeczytałeś sekcję „ Nie nadużywaj referencji ”, która mówi, że nie powinieneś używać dziecka state
do „sprawiania, by coś się działo”.
Mam nadzieję, że to pomoże ^ _ ^
Edycja: Dodano React.createRef()
metodę tworzenia referencji. Usunięto kod ES5.