我有一個(gè)外部(組件),可觀察的對(duì)象,我想聽這些更改。當(dāng)對(duì)象被更新時(shí),它發(fā)出更改事件,然后我想在檢測(cè)到任何更改時(shí)重新呈現(xiàn)該組件。對(duì)于頂層,React.render這是可能的,但是在組件內(nèi)不起作用(這是有道理的,因?yàn)樵搑ender方法僅返回一個(gè)對(duì)象)。這是一個(gè)代碼示例:export default class MyComponent extends React.Component { handleButtonClick() { this.render(); } render() { return ( <div> {Math.random()} <button onClick={this.handleButtonClick.bind(this)}> Click me </button> </div> ) }}在內(nèi)部單擊該按鈕會(huì)調(diào)用this.render(),但這實(shí)際上并不是導(dǎo)致渲染發(fā)生的原因(您可以看到它在起作用,因?yàn)橛蓜?chuàng)建的文本{Math.random()}不會(huì)更改)。但是,如果我只是打電話this.setState()而不是this.render(),它就可以正常工作。所以我想我的問題是: React組件是否需要具有狀態(tài)才能重新渲染?有沒有一種方法可以在不更改狀態(tài)的情況下強(qiáng)制組件按需更新?
3 回答

小怪獸愛吃肉
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
實(shí)際上,這forceUpdate()是唯一正確的解決方案,因?yàn)槿绻谄渲谢騼H返回時(shí)實(shí)施了附加邏輯,則setState()可能不會(huì)觸發(fā)重新渲染。shouldComponentUpdate()false
強(qiáng)制性升級(jí)()
調(diào)用forceUpdate()將導(dǎo)致render()在組件上被跳過shouldComponentUpdate()。更多...
setState()
setState()除非在中實(shí)現(xiàn)了條件渲染邏輯,否則它將始終觸發(fā)重新渲染shouldComponentUpdate()。更多...
forceUpdate() 可以從您的組件內(nèi)部通過調(diào)用 this.forceUpdate()
添加回答
舉報(bào)
0/150
提交
取消