Разве не одно и тоже componentWillMount и constructor?

Вообщем пишу я контейнер Contact и при инициализации его, хочу, что бы он изменял цвет шапки, вызываю действие в конструкторе, вроде все работает, но в chrome devTool ошибка:
Warning: setState(...): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`.

(Из сообщения, react рекомендует использовать componentWillMount.)

Проблема возникает если я перехожу по url к компоненту, тогда как если обновить страницу находясь на странице контейнера, ошибка не возникает, стейт меняется как надо.

Ошибку поборол с помощью метода componentWillMount(), но до этого читал на хабре следующее:
React на ES6+

. . .
Все методы жизненного цикла компонента, кроме одного могут быть определены, как можно было бы ожидать, с использованием нового синтаксиса определения классов. Конструктор класса в настоящее время выступает в роли ранее используемого метода componentWillMount:
// The ES5 way
var EmbedModal = React.createClass({
  componentWillMount: function() { … },
});

// The ES6+ way
class EmbedModal extends React.Component {
  constructor(props) {
    super(props);
    // Operations usually carried out in componentWillMount go here
  }
}

. . .


и на сайте react'a тоже не рекомендуют использовать componentWillMount:

componentWillMount() is invoked immediately before mounting occurs. It is called before render(), therefore setting state in this method will not trigger a re-rendering. Avoid introducing any side-effects or subscriptions in this method.

This is the only lifecycle hook called on server rendering. Generally, we recommend using the constructor() instead.


Я немного запутался, как в данной ситуации, вызвать действие, что бы это работало и что бы это соответствовало общим соглашениям?
  • Вопрос задан
  • 821 просмотр
Пригласить эксперта
Ответы на вопрос 1
@davidnum95
вызывай в componentDidMount()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы