Не удается увидеть данные в componentWillMount()?

Я делаю .get() запрос в Jquery и обновил состояние, а также.

Мой вопрос:

Почему я не могу увидеть данные в console.log(this.state.storage) в componentWillMount() так же как componentDidMount() но я получаю вывод в render()?

Также мне нужно будет выполнять операции с извлеченными данными, в каком жизненном цикле я должен это делать?

constructor() {
  super();
  this.state = {
    storage: []
  }
}

componentWillMount() {
  $.get('data.csv', (data) => this.setState({
    storage: data
  }));
  console.log(this.state.storage); //No Output
}

componentDidMount() {
  console.log(this.state.storage); //No Output
}

render() {
    return ( 
    <div >{this.state.storage}</div> //Do get the Output
    );

1 ответ

this.setState асинхронно обновляет состояние компонента; документация здесь. Если вы хотите увидеть изменения, внесенные this.setState Затем вы должны передать обратный вызов для вызова функции

Кроме того, вы можете выполнять свои действия в обратном вызове $.get метод, как показано ниже

constructor() {
  super();
  this.state = {
    storage: []
  }
}

myCustomOperations = (data) => {
  // do custom operations here with data
}

componentWillMount() {
  $.get('data.csv', (data) => {
    this.myCustomOperation(data);
    this.setState({
      storage: data
    }, () => {
      console.log(this.state.storage); // correct output
      // this.myCustomOperation(this.state.storage) // if you want to do the custom operation after the data has been put into the state
    });
  });
  console.log(this.state.storage); //No Output
}

componentDidMount() {
  console.log(this.state.storage); //No Output
}

render() {
    return ( 
    <div >{this.state.storage}</div> //Do get the Output
    );

Другие вопросы по тегам