Какой метод жизненного цикла я должен использовать для прослушивания изменений в состоянии и соответствующего обновления другого состояния в компоненте класса react

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я работаю над приложением, в котором есть массив данных, которые пользователь выбирает по времени, Например monthly , weekly и т. Д. В соответствии с этим массив должен отображаться на экране. Я пытался сделать это, в componentWillUpdate чем я не уверен. Но это дало мне ошибку.

Существует выпадающий список, из которого пользователь выбирает timespan значение. Я не знаю, куда мне это поместить, чтобы он прослушивал изменения в timeSpan любой справке, было бы здорово

Вот мой код.

 if (this.state.timeSpan === "yearly") {
      const yearlyData = this.props.dispensingData.duration["yearly"];
      this.setState({ spanData: yearlyData });
    } else if (this.state.timeSpan === "weekly") {
      const weeklyData = this.props.dispensingData.duration["weekly"];
      this.setState({ spanData: weeklyData });
    } 
 

Ответ №1:

Вам не нужно использовать setState для выбора определенного ключа из prop. Вы должны использовать setState для данных, которые, например, введены пользователем.

 const {timeSpan} = this.state;
let data;
if (timeSpan === "yearly" || timeSpan === "weekly") {
    data = this.props.dispensingData.duration[timeSpan];
}
 

например, вашей функции рендеринга должно быть достаточно для этого случая использования.

Ответ №2:

Вы можете использовать метод componentDidUpdate (документы здесь: https://fr.reactjs.org/docs/react-component.html#componentdidupdate ),

 componentDidUpdate(prevProps, prevState) {
  if (prevState.timespan !== this.state.timespan) {
    if (this.state.timeSpan === "yearly") {
      const yearlyData = this.props.dispensingData.duration["yearly"];
      this.setState({ spanData: yearlyData });
    } else if (this.state.timeSpan === "weekly") {
      const weeklyData = this.props.dispensingData.duration["weekly"];
      this.setState({ spanData: weeklyData });
    } 
  }
}
 

Комментарии:

1. Здесь мне нужно сравнить TimeSpan с monthly of weekly