Якщо ви використовуєте React 16.3+, пропонується запропонувати спосіб створення реф 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} />;
}
}
Коли компонент змонтується, властивість refатрибута currentбуде присвоєно посилається компоненту / DOM-елементу та буде присвоєно тому, nullколи він відключений. Так, наприклад, ви можете отримати доступ до нього за допомогою this.stepInput.current.
Детальніше RefObjectдивіться у відповіді @ apieceofbart або додано PR createRef() .
Якщо ви використовуєте більш ранню версію React (<16.3) або вам потрібен більш тонкий контроль над встановленням та зняттям даних, ви можете скористатися "зворотними дзвінками" .
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} />
}
}
Коли компонент змонтується, React викликає refзворотний виклик за допомогою елемента DOM і буде викликати його, nullколи він відключається. Так, наприклад, ви можете отримати доступ до нього просто за допомогою this.stepInput.
Визначивши refзворотний виклик як метод зв'язаного класу на відміну від вбудованої функції (як і в попередній версії цієї відповіді), ви можете уникнути зворотного виклику, який дзвонив двічі під час оновлень.
Там раніше в API , де refатрибут був рядком (див відповідь Akshar Патела ), але з - за деяких проблем , струнні рефов настійно рекомендується і в кінцевому підсумку будуть видалені.
Відредаговано 22 травня 2018 року, щоб додати новий спосіб робити рефлекси в React 16.3. Дякуємо @apieceofbart за те, що вказали, що був новий шлях.
refsатрибутом класу будуть застаріли в наступних версіях React.