Wenn Sie React 16.3+ verwenden, wird die vorgeschlagene Methode zum Erstellen von Refs verwendet React.createRef().
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: React.RefObject<HTMLInputElement>;
constructor(props) {
super(props);
this.stepInput = React.createRef();
}
render() {
return <input type="text" ref={this.stepInput} />;
}
}
Wenn die Komponente bereitgestellt wird, refwird die currentEigenschaft des Attributs dem referenzierten Komponenten- / DOM-Element zugewiesen und nullbeim Aufheben der Bereitstellung zurück zugewiesen. So können Sie beispielsweise mit darauf zugreifen this.stepInput.current.
Weitere Informationen findenRefObject Sie unter @ apieceofbarts Antwort oder die PR createRef() wurde hinzugefügt.
Wenn Sie eine frühere Version von React (<16.3) verwenden oder eine genauere Kontrolle darüber benötigen, wann Refs gesetzt und deaktiviert werden, können Sie "Callback Refs" verwenden .
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: HTMLInputElement;
constructor(props) {
super(props);
this.stepInput = null;
this.setStepInputRef = element => {
this.stepInput = element;
};
}
render() {
return <input type="text" ref={this.setStepInputRef} />
}
}
Wenn die Komponente bereitgestellt wird, ruft React den refRückruf mit dem DOM-Element auf und ruft ihn auf, nullwenn die Bereitstellung aufgehoben wird. So können Sie beispielsweise einfach mit darauf zugreifen this.stepInput.
Indem Sie den refRückruf als gebundene Methode für die Klasse im Gegensatz zu einer Inline-Funktion definieren (wie in einer früheren Version dieser Antwort), können Sie verhindern, dass der Rückruf bei Aktualisierungen zweimal aufgerufen wird .
Es verwendet zu sein , eine API , wo das refAttribut war ein String (siehe Akshar Patel Antwort ), aber aufgrund einiger Probleme , string Refs dringend abgeraten werden und wird schließlich entfernt werden.
Bearbeitet am 22. Mai 2018, um die neue Methode zum Ausführen von Refs in React 16.3 hinzuzufügen. Vielen Dank an @apieceofbart für den Hinweis, dass es einen neuen Weg gibt.
refsKlassenattribut werden in kommenden React-Versionen nicht mehr unterstützt.