我在做什麼:反應:父組件引用不能被新安裝的子組件訪問?
簡單 - 我需要的組件包含它(Messages
)儘快滾動消息列表的底部安裝。
猴子扳手在我的計劃:)
後裝入都很正常,直到滾動至底部...
我只是通過採取滾動能夠子組件的header
搬來搬去一些傢俱(Messages
),並將其移至其父組件(MessageSection
)中以便使header
保持不變。
這裏是之前和一個AFTER:
之前(!耶它的工作) MessageSection.js
if(this.state.messages !== null)
return (
<ScrollArea speed={0.8} className="area" contentClassName="content">
<Messages messages={this.state.messages} />
</ScrollArea>
);
}else{
return (
<ScrollArea speed={0.8} className="area" contentClassName="content">
<EmptyMessages />
</ScrollArea>
);
}
的簡單變化:
(基本上只是移動Messages
的標題轉化爲父母的MessageSection
)
將頁眉從滾動的子組件中取出(
Messages
)。將報頭中的ScrollArea
上方。然後以呈現新JSX -I裹一個新的div頁眉和ScrollArea( 「消息」)
AFTER:(什麼!YU NO工作?)
MessageSection.js
if(this.state.messages !== null) {
return (
<div className="messages">
<div className ="messages-section-header">
<span className="header">{this.props.name}</span>
</div>
<ScrollArea speed={0.8} className="area scrollarea-flex" contentClassName="content">
<Messages messages={this.state.messages} />
</ScrollArea>
</div>
);
}else{
return (
<div className="messages">
<ScrollArea speed={0.8} className="area scrollarea-flex" contentClassName="content">
<EmptyMessages />
</ScrollArea>
</div>
);
}
的錯誤:
遺漏的類型錯誤得到這個錯誤改制後:無法讀取屬性 '的offsetHeight'
的原因錯誤:
當滾動能夠組成Messages
坐騎在它的componentDidMount
它會嘗試使用ScrollArea
組件的暴露情況下滾動至底部,但refs
的ScrollArea
內不存在。這是奇怪的,因爲refs
將存在,如果稍後調用componentDidUpdate
對於參考,這裏是發生故障的子組件。
MessageList.js(渦旋能夠試圖滾動到底部,因爲它安裝組件)
contextTypes: {
scrollArea: React.PropTypes.object //Used by the Library to Access the Scrolling Panel(The Parent Component)
},
componentDidMount: function() {
this._scrollToBottom();
},
_scrollToBottom: function() {
var scrollHeight = this.refs.messages.scrollHeight;
this.context.scrollArea.scrollYTo(scrollHeight);//ERROR -the refs will not exist inside context as expected
}
爲什麼我感到莫名其妙:
它不有意義的如何安裝ScrollArea
,並且它的小孩Messages
也可以安裝並調用定義的環境ScrollArea
暴露給它,但ScrollArea
的裁判不存在? 這是一個雙重混淆,因爲它在我做了小小的改變之前就已經工作了。
問:
在我的代碼結構的簡單變化怎麼會導致上下文不能訪問它的裁判
你試過設置裁判[使用回調(https://facebook.github.io/react/文檔/更高 - - refs.html#的-REF-回調屬性)? – enjoylife
就像我嘗試以類似方式重構代碼的更新一樣,問題仍然存在。所以更好的解釋是,它以前正在僥倖。 –
我最好的猜測是,現在滾動區域正在從flex-grow獲得高度:1;它必須是某種安裝問題,如@brandon在他的回答中解釋的。 –