Если вы используете 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) или вам нужен более детальный контроль над установкой и отключением refs, вы можете использовать «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} />
}
}
Когда компонент монтируется, React вызывает ref
обратный вызов с элементом DOM и будет вызывать его, null
когда он размонтируется. Так, например, вы можете получить к нему доступ, просто используя this.stepInput
.
Определив ref
обратный вызов как связанный метод класса, а не встроенную функцию (как в предыдущей версии этого ответа), вы можете избежать повторного вызова обратного вызова во время обновлений.
Там раньше в API , где ref
атрибут был строкой (см ответ Akshar Патела ), но из - за некоторых проблем , струнные рефов настоятельно рекомендуется и в конечном итоге будут удалены.
Отредактировано 22 мая 2018 г., чтобы добавить новый способ выполнения ссылок в React 16.3. Спасибо @apieceofbart за указание на новый способ.
refs
атрибутом класса будут устаревшими в следующих версиях React.