То, что arr
на самом деле является объектом поля экземпляра, поэтому правильный способ получить к нему доступ и обновить его с помощью ключевого слова this
:
componentDidMount() {
// Some function to get JSON...
this.arr = {panelone: 'off', paneltwo: 'on'}
//...
}
Но это оставило бы вас с проблемой, что React не обновляет дочерние компоненты при обновлении пользовательских полей экземпляра.
Таким образом, правильным будет использование состояния компонента. В начале класса App
определите состояние с arr
внутри:
constructor(props) {
super(props);
this.state = {
arr: {
panelone: 'off', paneltwo: 'on'
}
};
}
Тогда вместо обновления arr
в качестве поля экземпляра следует использовать setState
метод:
componentDidMount() {
// Some function to get JSON...
this.setState({
arr: {
panelone: 'off',
paneltwo: 'on'
}
});
//...
}
В методе рендеринга App
используйте this.state.arr
вместо this.arr
:
render() {
return (
<div className="App">
<TopBar />
<HashRouter>
<div>
<nav>
<ul className="header">
<li><NavLink exact to="/">Overview</NavLink></li>
</ul>
</nav>
<div className="main-container">
<Route
exact path="/"
render={(props) => <Child arr = {this.state.arr} />}
/>
</div>
</div>
</HashRouter>
</div>
);
}
И он будет работать так же, как вы в настоящее время работаете с компонентом Child
, вы должны проверить документацию о состоянии