我的工作,對最新動態web應用程序和我的一些代碼: MainContainer.js
:關於react.js條件渲染,或者react.js中的潛在錯誤?
renderContent(source) {
let content;
switch (source) {
case 'bbc':
case 'cnn':
case 'reuters':
content = <Guide source={source}/>;
break;
case 'medium':
content=null;
break;
default:
content = null;
break;
}
return content;
}
render() {
let {source} = this.props;
return this.renderContent(source);
}
這是代碼MainContainer
,這是一個容器組件來呈現來自CNN,BBC或不同的新聞。它的包裝部件App
App.js render()
<div>
<ScrollableTab sources={sources} handleChange={this.handleSwitchTag.bind(this)} current={current}/>
<MainContainer source={sources[current].toLowerCase()}/>
</div>
當用戶點擊ScrollableTab
一些選項卡中,MainContainer
變化source
財產,這將導致不同的Guide
渲染。(一些記錄後,source
沒有變化在MainContainer
)。
但是,此失敗,Guide
未能卸下。只有當用戶點擊Medium
這種情況下renderContent()
返回null可以Guide
umount。
我想,這可能是因爲React.js無法提取類似的組件並進行一些優化,它認爲不需要卸載實際上是不同的「相同」組件。
所以,我想補充key=
在renderContent
,我的意思是:
renderContent(source) {
let content;
switch (source) {
case 'bbc':
case 'cnn':
case 'reuters':
content = <Guide key={source} source={source}/>;
break;
case 'medium':
content=null;
break;
default:
content = null;
break;
}
return content;
}
render() {
let {source} = this.props;
return this.renderContent(source);
}
這樣一來,它的工作原理。但是我在React.js的文檔中找不到任何解釋。 或者我錯過了一些文檔。有人告訴我這是一個bug還是隻是過度優化?
文檔中的相關部分:https://facebook.github.io/react/docs/lists-and-keys.html,https://facebook.github.io/react/docs/reconciliation.html。尤其是:*「鍵幫助React識別哪些項目已更改,添加或刪除。」* –