2015-06-15 355 views
11

我意識到調用setState不會立即更新this.state,也不會立即調用render並刷新DOM。文檔說立即用react.js強制重新渲染(更新狀態並更新DOM)

setState()不會立即改變this.state,但會創建一個掛起的狀態轉換。調用此方法後訪問this.state可能會返回現有值。

無法保證對setState的調用進行同步操作,並且可能會調用調用以提高性能。

我希望能夠在任何時候都像這樣強制進行「狀態轉換」。這似乎應該是一個相當自然的操作,但我在文檔中找不到任何提及。有沒有辦法做到這一點?

+0

什麼是你的使用情況?您可能對atomic ['setState'](http://facebook.github.io/react/docs/component-api.html#setstate)更感興趣。 –

+0

你有什麼要做的是有這個要求? – WiredPrairie

回答

8

您可以使用此forceUpdate

如果你的渲染()方法比this.props或 this.state其他的東西讀,你需要告訴反應過來的時候,它需要重新通過調用forceUpdate()運行render() 。你還需要調用forceUpdate(),如果你直接改變this.state,則爲 。

https://facebook.github.io/react/docs/component-api.html#forceupdate

+11

我不確定'forceUpdate'是否可以做我想做的事(也許它確實如此,但無論哪種方式,都不清楚)。我認爲'forceUpdate'的意義在於,即使沒有設置狀態,也會使元素重新呈現,但是這個渲染仍然可以像任何渲染一樣排隊。這是正確還是錯誤? – tjhance

+0

這是正確的。 'forceUpdate'會導致組件渲染到vDOM _elements_中,但它不會強制將vDOM刷新到實際的DOM(不知道如何實現您想要的) – Nevir

0

您可以結合使用forceUpdate與具有頂級組件作爲等關鍵..

let key= 0; 

var Hello = React.createClass({ 

    sudoForceUpdate(){ 
    key++; 
    this.forceUpdate(); 
    }, 
    render: function(){ 
    return <div key={key}>Example</div>; 
    } 
}); 

通過編輯鍵和強制更新時,DOM會總是放棄。

下面是一個例子,強調了只是一個強制編輯和一個關鍵更改*之間的區別。

https://jsfiddle.net/69z2wepo/82763/

*注意,這可能是非常糟糕的做法。

由於本阿爾珀特: https://groups.google.com/forum/#!topic/reactjs/8JgClU9jol0