2016-07-17 96 views
0

更新的setState(...):只能更新一安裝或安裝組件

發現在我的HTML問題。我在Yii佈局中通過額外<?php $this->endBody() ?>將腳本插入到<body>兩次。


我已經看到了SOF中的這個錯誤消息的其他解決方案,但我認爲我是不同的。

當我在$.get回調中調用setState的那一刻,我會收到錯誤消息。

我已經刪除了所有在測試過程中評論過的未解決錯誤的代碼。

正如你在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

'componentDidMount'內部的第一個'setState'不是必需的,你可以設置'total_page'爲初始狀態。 –

+0

實際的代碼是設置更多的數據。我只是改變了它的測試。但我發現了這個問題。將更新我的問題。 – resting

+0

是的,在'componentWillMount'或'componentDidMount'中使用'setState'沒有任何意義。你也可以將你的'get'請求移動到'componentWillMount' - 它將在之前被調用。 –

回答

0

當您嘗試調用setState用於卸載組件通常你能得到這個錯誤。 爲了防止發生這種情況,您應該使用標記(將其設置爲getInitialState並在componentWillUnmount中重置)。或者(更好)使用Redux來排除視覺組件中的所有I/O操作和異步調用。

相關問題