Незадовго до того, як я розбираюся в деталях про те, як ви можете отримати доступ до стану дочірнього компонента, переконайтеся, що прочитайте відповідь Маркуса-іпсе щодо кращого рішення для вирішення цього конкретного сценарію.
Якщо ви дійсно бажаєте отримати доступ до стану дітей компонента, ви можете призначити властивість, викликану ref
кожною дитиною. Зараз існує два способи впровадження посилань: Використання React.createRef()
та зворотний зв'язок зворотного дзвінка.
Використання React.createRef()
Наразі це рекомендований спосіб використання посилань на React 16.3 (див . Документи для отримання додаткової інформації). Якщо ви використовуєте більш ранню версію, то див. Нижче щодо посилань на зворотний дзвінок.
Вам потрібно буде створити нове посилання в конструкторі батьківського компонента, а потім призначити його дитині за допомогою ref
атрибута.
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Щоб отримати доступ до цього виду, вам потрібно скористатися:
const currentFieldEditor1 = this.FieldEditor1.current;
Це поверне екземпляр змонтованого компонента, щоб потім ви могли використовувати його currentFieldEditor1.state
для доступу до стану.
Лише коротка примітка, щоб сказати, що якщо ви використовуєте ці посилання на вузлі DOM замість компонента (наприклад <div ref={this.divRef} />
), то this.divRef.current
повернете базовий елемент DOM замість компонентного примірника.
Відкликання дзвінків
Це властивість приймає функцію зворотного виклику, яка передається посиланням на доданий компонент. Цей зворотний виклик виконується відразу після встановлення або відключення компонента.
Наприклад:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
У цих прикладах посилання зберігається на батьківському компоненті. Щоб викликати цей компонент у своєму коді, ви можете використовувати:
this.fieldEditor1
а потім використовувати this.fieldEditor1.state
для отримання держави.
Варто зазначити одне, переконайтеся, що ваш дочірній компонент відображений, перш ніж ви намагаєтесь отримати доступ до нього ^ _ ^
Як вище, якщо ви використовуєте ці посилання на вузлі DOM замість компонента (наприклад <div ref={(divRef) => {this.myDiv = divRef;}} />
), тоді this.divRef
повернете базовий елемент DOM замість компонентного примірника.
Детальна інформація
Якщо ви хочете прочитати більше про власність React, перегляньте цю сторінку у Facebook.
Переконайтеся, що ви прочитали розділ " Не перенавантажуйте рефлекси ", в якому йдеться про те, що ви не повинні використовувати дитину для того, state
щоб "робити щось".
Сподіваюся, це допомагає ^ _ ^
Редагувати: Додано React.createRef()
метод створення реф. Видалений код ES5.