Реагировать на компонент componentDidMount, не получая реквизиты от родителя - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь передать реквизиты от родительского компонента к дочернему компоненту, и хотя его вызывают дважды (не знаю, почему 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: 

Есть идеи, чтобы указать мне правильное направление? С благодарностью!

1 Ответ

0 голосов
/ 01 мая 2018

Для ответа смотрите комментарии @ azium:

нет, он не должен отображаться в консоли именно потому, что componentDidMount запускается только один раз, когда компонент монтируется. когда компонент Members вызывает setState и передает новый реквизит Menu, он уже смонтирован, поэтому функция и журнал консоли не будут вызываться снова с заполненным массивом. Вы можете легко это проверить, переместив консольный журнал в функцию render
Компонент - это , принимающий реквизиты перед созданием, но реквизит - это пустой массив. Вы прямо говорите это в своем конструкторе Members. Затем после монтирования Members вы вызываете setState, что вызывает другой рендеринг с заполненным массивом. Прочитайте документы для полного объяснения /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...