2014-07-22 69 views
2

不確定我曾經在一個文件中的下列組件調用DashboardPosition.jscomponentInstance.setState在0.11.0

var DashboardPosition = React.createClass({ 
    getInitialState: function() { 
     return { 
      items: [] 
     }; 
    }, 
    render: function() { 
     return (
      <div className="well well-sm dashboard-item"> 
       This component has {this.state.items.length} items 
      </div> 
     ); 
    } 
}); 

然後,我在我的網頁沒有問題,像這樣使這個:

var dashboardPosition = <DashboardPosition />; 
React.renderComponent(dashboardPosition, document.querySelector("#position")); 

但當我嘗試以下操作:

var dashboardPosition = <DashboardPosition />; 

React.renderComponent(dashboardPosition, document.querySelector("#position")); 

dashboardPosition.setState({ 
    items: [{name: "AMD"}, {name: "LIQ"}, {name: "ELEC"}] 
}); 

我收到以下錯誤:

Uncaught TypeError: undefined is not a function 
    dashboardPosition.setState 

這似乎只發生在v0.11.0。我已經在v0.10.0試過了,它工作正常。可能的錯誤或我錯過了什麼?

回答

3

這是一個在0.10.0版本中開始的改變,在開發版本中給你一個警告,而0.11.0現在是一個「突變」。

當您創建組件的實例時,返回的是描述符,它只是呈現該組件所需的任何反應。之前到0.10.0這恰好是實際的虛擬DOM節點,這導致了很多反模式,並且消除了可以優化某些事物的反應的潛力。你可以不再做返回的值有任何不同之處:

  • 從渲染函數返回他們
  • 使用cloneWithProps添加上作出更新的副本

如果您需要SETSTATE上DashboardPosition組件,您需要從DashboardPosition內部完成。

如果在DashboardPosition中沒有意義,您應該通過items作爲道具,例如, <DashboardPosition items={items} />,並使用this.props.items而不是this.state.items

+0

好吧,謝謝,我想我需要通過它作爲屬性然後:) – CallumVass

+0

在這種情況下,你可以做'React.renderComponent(,target)'當你想更新它。每次嘗試不要執行document.querySelector。 – FakeRainBrigand

相關問題