Задать вопрос
anxieter
@anxieter

Понимание жизненного цикла React вкупе с получением данных от сервера?

Здравствуйте. Помогите понять работу жизненного цикла react.
В коде приведен кода компонента. В момент ComponentDidMount данные фетчатся, попадают в Redux хранилище, откуда они с успехом попадают в props компонента.
В данном примере curPrice - это props получаемые от сервера. amount - props, полученные от родительского компонента.
Далее я пытаюсь "поймать" curPrice в методах жизненного цикла, но выводится так так как надо.
Далее вопросы идут по ходу кода.

class Card extends Component {
  state = {
    newPrice: null,
  };

  componentDidMount() {
    const { fetchPrice } = this.props;
      fetchPrice(fetchType);
  }

  shouldComponentUpdate(nextProps, nextState) {
    console.log(this.props.curPrice); // undefined - почему????  - ведь мы curPrice передали
    // в this.props при рендере
    console.log(nextProps.curPrice); // {USD: 100} // а здесь они есть)) 
    return true;
  }

 // Тут я обновляю страницу и смотрю что приходит, или не поможет?...
  componentDidUpdate(prevProps, prevState) {
    console.log(prevProps.curPrice); // undefined  - почему???? 
  }

  static getDerivedStateFromProps(props, state) {
    console.log(props.amount); // видна с первого рендер
    console.log(props.curPrice); // видна сразу со второго render
    // Поэтому чтобы записать State - приходится делать дополнительную проверку, 
    //которую я нигде в примерах не встречал - это правильно?..
    if (props.curPrice) {
      return { newPrice: props.curPrice };
    } else return null;
  }

  render() {
    const { curPrice, amount } = this.props;
    return (...);
  }
}

const mapStateToProps = (state, ownProps) => {
  return {
    curPrice: state.prices.types[ownProps.idx],
  };
};

const mapDispatchToProps = {
  fetchPrice,
};

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(Card);
  • Вопрос задан
  • 177 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
В данном примере curPrice - это props получаемые от сервера

Метод жизненного цикла componentDidMount вызывается после render.
Ничего удивительного в том, что при первой отрисовке вместо данных вы получаете undefined нет. К этому моменту еще даже не инициирован ваш запрос на сервер.

Поэтому чтобы записать State - приходится делать дополнительную проверку,
которую я нигде в примерах не встречал - это правильно?..

Тут не ясно для чего вам вообще использовать состояние. Если вы никак не изменяете это значение в своем компоненте, то используйте его напрямую из props.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽