Задать вопрос
ZamarShoo
@ZamarShoo
React/Vue, Node/PHP, Wordpress/Drupal

Почему игнорируется componentDidMount?

Есть класс, в который мы попадаем при роутинге, в constructor и в render заходит (причем по 2 раза), а вот в методы по типу componentDidMount, componentDidUpdate и тд не заходит. От этого не появляются данные. Почему так?
import React from "react";
import {connect} from "react-redux";
import {loadOneFoodPost} from "../../redux/food-items-reducer";

class FoodPage extends React.PureComponent {

    constructor(props) {
        console.log('constructor')
        super(props);
    }

    componentDidMount() {
        console.log('componentDidMount')
        this.props.loadOneFoodPost(this.props.match.params.id)
    }


    componentDidUpdate(prevProps, prevState, snapshot) {
        console.log('componentDidUpdate')
        if (prevState.id !== this.props.match.params.id) {
            this.props.loadOneFoodPost(this.props.match.params.id)
        }
    }

    render() {
        const {post, author, anotherPosts} = this.props
        console.log('render')
        return(
            <>
                <h2>{post.title}</h2>
            </>
        )
    }
}

const mapStateToProps = (state) => ({
    post: state.foodItems.foodPost[0],
    author: state.foodItems.authorInfo[0],
    anotherPosts: state.foodItems.foods
})

export default connect(
    mapStateToProps, {loadOneFoodPost}
)(FoodPage)
  • Вопрос задан
  • 496 просмотров
Подписаться 3 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Merion Academy
    Frontend-разработка на React
    4 месяца
    Далее
  • ProductStar
    React: отточите навыки интерфейсной разработки
    6 недель
    Далее
Пригласить эксперта
Ответы на вопрос 1
mbelskiy
@mbelskiy
Software Developer
От того что console.log дважды отработал в render, это не значит что компонент был перерисован. Таковы нюансы работы реакта в сборке для разработки. Поэтому ререндеры нужно отлаживать через react dev tools профайлер.

componentDidMount вызывается только один раз для каждого экземпляра компонента.

Если не вызывается componentDidUpdate, значит перерисовки не было.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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