Якщо ви використовуєте 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.