2016-07-17 2 views
0

UpdateSetState (...): Можно только обновить установленный или монтажный компонент

Нашли проблему в моем HTML. Я вызывал сценарии, которые нужно вставлять дважды в мой <body>, имея дополнительный <?php $this->endBody() ?> в моем макете Yii.


Я видел другие решения для этого сообщения об ошибке в SOF, но я считаю, что мое другое.

Момент, который я вызываю setState в обратном вызове $.get, я получу сообщение об ошибке.

Я удалил весь код, который я прокомментировал во время тестирования, который не разрешил ошибку.

Как вы можете видеть в componentDidMount Я позвонил setState дважды. Первое нормально, но второй вызов вызывает сообщение об ошибке.

Это не имеет никакого отношения к методу $.get?

Компонент

let GridComponent = React.createClass ({ 
     getInitialState() 
     { 
      return { 
       total_page : 0, 
       next_page : 0, 
       current_page: 0, 
       items  : [] 
      } 
     }, 
     componentDidMount() { 
      this.setState ({ 
       total_page: 1 
      }); 
      $.get ('/entry/getdata?page=' + this.state.current_page, (d) => { 
       if (typeof d !== 'undefined') { 
        this.setState ({ 
         total_page: 1 
        }); 
       } 
      }); 

     }, 
     componentDidUpdate() { 

     }, 
     mapDataToGridItems(d) { 

     }, 
     loadMore() { 

     }, 
     fetchData() { 

     }, 

     render() 
     { 
      return (
       <div className="grid-gallery-container"> 

       </div> 
      ) 
     } 

    }) 
    ; 
ReactDOM.render (
    <GridComponent />, document.getElementById ('grid-component-root') 
); 
+1

Первый 'setState' внутри' componentDidMount' не требуется, вы можете установить 'total_page' в начальном состоянии. –

+0

Фактический код должен был установить больше данных. Я просто изменил его для тестирования. Но я нашел проблему. Обновит мой вопрос. – resting

+0

Да, не имеет смысла использовать некоторые 'setState' внутри' componentWillMount' или 'componentDidMount'. И вы также можете перенести свой запрос 'get' на' componentWillMount' - он будет вызываться раньше. –

ответ

0

Обычно вы получили эту ошибку при попытке вызвать setState для убранной компоненты - это часто бывает с обратными вызовами. Чтобы предотвратить это, вы должны использовать флаг (установить его в getInitialState и сбросить в componentWillUnmount). Или (гораздо лучше) используйте Redux, чтобы исключить все операции ввода-вывода и асинхронные вызовы с вашего визуального компонента.

Смежные вопросы

 Смежные вопросы