конструктор реагирует на два раза - PullRequest
1 голос
/ 12 марта 2019

У меня есть список сообщений, и я пытаюсь вызвать действие внутри конструктора или componentDidMount для каждого сообщения. Но почему-то, когда я отправляю новое сообщение, конструктор и функции componentDidMount вызываются дважды.

 constructor(props) {
    super(props);

    if (condition1) {
       this.props.actions.action1();
    } else if (condition2) {
       this.props.actions.action2();
    }    
}

Эти функции вызываются только один раз, когда сообщения считываются из списка. Но когда я отправляю новое сообщение, они вызываются дважды.

Как я могу избежать этой ситуации. Я пытался использовать функцию componendDidUpdate следующим образом:

componentDidUpdate(prevProps, prevState) {     
      if (prevProps.post.id !== this.props.post.id) {
         if (condition1) {
            this.props.actions.action1();
         } else if (condition2) {
            this.props.actions.action2();
         }
      }   
}

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Когда код в конструкторе запускается дважды, вы можете быть уверены, что компонент создается заново два раза.Это может происходить по разным причинам, самая простая причина, вероятно, состоит в том, что компонент используется в нескольких местах:

<MyComponent />
<MyComponent />

Другая причина может заключаться в том, что у вас есть условный рендеринг, то есть, возможно, вы рендеринг основан налогическое значение, которое изменяется:

{ myBoolean && <MyComponent /> }

Если вы переключите myBoolean два раза, конструктор будет выполнен два раза.

0 голосов
/ 12 марта 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...