Непосредственно перед тем, как я подробно расскажу о том, как вы можете получить доступ к состоянию дочернего компонента, пожалуйста, прочитайте ответ Markus-ipse относительно лучшего решения для этого конкретного сценария.
Если вы действительно хотите получить доступ к состоянию дочерних компонентов, вы можете назначить свойство, вызываемое ref
для каждого дочернего элемента . Теперь есть два способа реализации ссылок: использование React.createRef()
и обратный вызов refs.
С помощью 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.