Jeśli używasz React 16.3+, sugerowanym sposobem tworzenia referencji jest użycie 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} />;
}
}
Gdy komponent zostanie zamontowany, właściwość refatrybutu currentzostanie przypisana do przywoływanego komponentu / elementu DOM i przypisana z powrotem do nullmomentu odłączenia. Na przykład możesz uzyskać do niego dostęp za pomocą this.stepInput.current.
Aby uzyskać więcej informacji RefObject, zobacz odpowiedź @ apieceofbart lub PR createRef() został dodany.
Jeśli używasz wcześniejszej wersji Reacta (<16.3) lub potrzebujesz bardziej szczegółowej kontroli nad ustawieniem i wyłączeniem referencji, możesz użyć „callback refs” .
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} />
}
}
Gdy komponent zostanie zamontowany, React wywoła wywołanie refzwrotne z elementem DOM i wywoła je nullprzy odłączeniu. Na przykład możesz uzyskać do niego dostęp po prostu za pomocą this.stepInput.
Definiując refwywołanie zwrotne jako metodę powiązaną w klasie, w przeciwieństwie do funkcji wbudowanej (jak w poprzedniej wersji tej odpowiedzi), można uniknąć dwukrotnego wywołania wywołania zwrotnego podczas aktualizacji.
Tam kiedyś API gdzie refatrybut był ciąg (patrz odpowiedź Akshar Patel ), ale z powodu pewnych problemów , bibl smyczkowe są odradzane i ostatecznie zostaną usunięte.
Edytowano 22 maja 2018 r., Aby dodać nowy sposób robienia referencji w Reakcie 16.3. Dzięki @apieceofbart za wskazanie, że pojawił się nowy sposób.
refsatrybutem class zostaną wycofane w nadchodzących wersjach Reacta.