Вы можете сделать это без использования ссылок . Этот подход предпочтителен, поскольку ссылки могут привести к хрупкому коду . Документы React рекомендуют находить другие решения, где это возможно:
Если вы не запрограммировали несколько приложений с помощью React, ваша первая склонность будет заключаться в том, чтобы попытаться использовать ссылки, чтобы «сделать вещи» в вашем приложении. Если это так, уделите немного времени и подумайте о том, где должно находиться государство в иерархии компонентов. Часто становится ясно, что надлежащее место для «владения» этим состоянием находится на более высоком уровне в иерархии. Размещение этого состояния часто устраняет любое желание использовать ссылки, чтобы «заставить вещи происходить» - вместо этого поток данных обычно выполняет вашу цель.
Вместо этого мы будем использовать переменную состояния, чтобы сфокусировать второе поле ввода.
Добавьте переменную состояния, которую мы передадим в качестве опоры DescriptionInput
:
initialState() {
return {
focusDescriptionInput: false,
};
}
Определите метод-обработчик, который установит для этой переменной состояния значение true:
handleTitleInputSubmit() {
this.setState(focusDescriptionInput: true);
}
После отправки / нажатия Enter / Next на TitleInput
мы позвоним handleTitleInputSubmit
. Это установит focusDescriptionInput
в истину.
<TextInput
style = {styles.titleInput}
returnKeyType = {"next"}
autoFocus = {true}
placeholder = "Title"
onSubmitEditing={this.handleTitleInputSubmit}
/>
DescriptionInput
's focus
prop установлен в нашу focusDescriptionInput
переменную состояния. Таким образом, когда focusDescriptionInput
изменения (в шаге 3), DescriptionInput
будет повторно визуализировать с focus={true}
.
<TextInput
style = {styles.descriptionInput}
multiline = {true}
maxLength = {200}
placeholder = "Description"
focus={this.state.focusDescriptionInput}
/>
Это хороший способ избежать использования ссылок, так как ссылки могут привести к более хрупкому коду :)
РЕДАКТИРОВАТЬ: h / t в @LaneRettig, чтобы указать, что вам нужно обернуть React Native TextInput некоторыми добавленными реквизитами и методами, чтобы он реагировал на focus
:
// Props:
static propTypes = {
focus: PropTypes.bool,
}
static defaultProps = {
focus: false,
}
// Methods:
focus() {
this._component.focus();
}
componentWillReceiveProps(nextProps) {
const {focus} = nextProps;
focus && this.focus();
}