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, ref
wird die current
Eigenschaft des Attributs dem referenzierten Komponenten- / DOM-Element zugewiesen und null
beim 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 ref
Rückruf mit dem DOM-Element auf und ruft ihn auf, null
wenn die Bereitstellung aufgehoben wird. So können Sie beispielsweise einfach mit darauf zugreifen this.stepInput
.
Indem Sie den ref
Rü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 ref
Attribut 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.
refs
Klassenattribut werden in kommenden React-Versionen nicht mehr unterstützt.