Я пытаюсь передать реквизиты родительского компонента дочернему компоненту, и хотя он вызывается дважды (не знаю почему, componentDidMount
должен вызываться только один раз), реквизиты кажутся пустыми.
Родительский компонент:
class Members extends Component{
constructor(props){
super(props);
this.state = {
interests: []
}
}
componentDidMount(){
fetch(interestUrl, {
method: 'GET',
headers: {
"Content-Type": "application/json",
"Authorization": this.props.authToken
}
})
.then((response) => response.json())
.then((json) => {this.setState({interests: json})})
.catch(error => {console.log("Error: " + error)})
};
render(){
return(
<div className="Members-body">
<div className="Menu-sidebar">
<Menu interestList = {this.state.interests}/>
</div>
<div className="Main-container">
<Main/>
</div>
</div>
)
}
}
export default Members;
Дочерний компонент:
class Menu extends Component {
constructor(props){
super(props);
}
componentDidMount(){
console.log("interestList: " + this.props.interestList);
}
render() {
return(
<div className="Menu-container">
este es el menu de la aplicacion
</div>
)
}
}
export default Menu;
Журнал консоли из componentDidMount внутри компонента Menu печатает:
interestList:
interestList:
Есть идеи указать мне в правильном направлении? Высоко оценен!
Main
не указывает наMenu
- person Shubham Khatri   schedule 30.04.2018"foo: " + []
- person azium   schedule 30.04.2018componentDidMount
, поэтому он должен вызываться после рендеринга компонента и должен иметь реквизиты, переданные родителем - person Dieguinho   schedule 30.04.2018componentDidMount
запускается только один раз, когда компонент монтируется. когда компонентMembers
вызываетsetState
и передает новые реквизиты вMenu
, он уже смонтирован, так что эта функция и журнал консоли больше не будут вызываться с заполненным массивом. вы можете легко это проверить, переместив журнал консоли в функциюrender
- person azium   schedule 30.04.2018Members
. Затем послеMembers
монтирования вы вызываетеsetState
, который запускает другой рендеринг с заполненным массивом. Прочтите документы, чтобы получить полное объяснение. - person azium   schedule 30.04.2018