Я использую два компонента, и я использую этот шаблон: дочерний компонент должен оставаться изолированным как можно больше - он обрабатывает собственную ошибку проверки. Родительский компонент должен проверять наличие ошибок, которые имеют зависимости между дочерними элементами. Итак, в моем случае: password
поле и password confirmation
поле.React: Losing ref values
Вот мой код:
а) SignUp (родитель)
Установка начального состояния.
constructor() {
super();
this.state = {
isPasswordMatching: false
};
}
Метод render()
Я выводил свой дочерний компонент. Через prop под названием callback
Способ распространения isPasswordMatching()
путем привязки родительского элемента this
. Цель состоит в том, что метод можно вызвать в дочернем компоненте.
<TextInput
id={'password'}
ref={(ref) => this.password = ref}
callback={this.isPasswordMatching.bind(this)}
// some other unimportant props
/>
<TextInput
id={'passwordConfirm'}
ref={(ref) => this.passwordConfirm = ref}
...
isPasswordMatching()
метод проверка, если пароли совпадают (через реф this.password
и this.passwordConfirm
), а затем обновляет состояние. Обратите внимание, что этот метод вызывается внутри дочернего элемента (пароль или парольConfirm).
isPasswordMatching() {
this.setState({
isPasswordMatching: this.password.state.value === this.passwordConfirm.state.value
});
}
б) TextInput (ребенок)
Установка начального состояния.
constructor() {
super();
this.state = {
value: '',
isValid: false
};
}
Выполнение проверки смазки и состояние обновлено.
onBlur(event) {
// doing validation and preparing error messages
this.setState({
value: value,
isValid: this.error === null
});
}
Последние. Вызывается функция обратного вызова.
componentDidUpdate(prevProps) {
if (prevProps.id === 'password' || prevProps.id === 'passwordConfirm') {
prevProps.callback();
}
}
Выпуск
Как-то мои рефов теряются. Сценарий:
- компонент Родитель renderder
- компоненты по уходу за детьми предоставляются
- Я вхожу один из полей ввода и выйти (это вызывает
onBlur()
метод) - состояние обновляется, ребенок компонент оказывается componentDidUpdate()
иprevProp.callback()
- При переходе на
isPasswordMatching()
метод выводаthis.password
иthis.passwordConfirm
- это объекты с ожидаемыми значениями ссылки. Обновляется состояние родительского компонента. - Затем все дети визуализируются, компоненты обновляются, вызывается обратный вызов, но на этот раз
this.password
иthis.passwordConfirm
-null
.
Я понятия не имею, почему ссылки потеряны. Должен ли я делать что-то по-другому? Спасибо заранее.
Благодарим вас за усилия. О, так это моя проблема. У вас есть какие-то указатели, как мне это решить? Должен ли я использовать контекст? –
Спасибо. Это, похоже, было потеряно в обновлении документации. –