[英]Are there three tree's involved in the React Virtual Dom, or just two?
對於 React 虛擬 Dom,我理解子樹部分,或者至少我認為我是這樣理解的:React 只會從調用了 setState 的組件重新渲染,並且可能是這些組件的所有子組件。 即沒有調用 setState 方法的組件,也沒有調用過的組件的子組件,可以安全地重新渲染。
我不清楚的部分是,當 React 在這些節點上進行協調過程時,它到底在比較什么? 我相信在這一步我們有一個新生成的虛擬 DOM 樹,但是它是否將它與舊的虛擬 DOM 樹進行比較,然后將這些更改應用於實際 DOM,或者這個協調過程是在新生成的虛擬 DOM 之間完成的嗎? , 和實際的 DOM 直接?
根據上述答案,我可能會有一個后續問題。 謝謝!
React 將下一個虛擬 DOM 與之前的虛擬 DOM 進行比較,並且僅在它們不同時才應用更新。
React 不知道對真實 DOM 的任何直接更改。 如果它不在 react 的虛擬 DOM 中,那么 react 不知道它。
Codepen 在這里帶有 - 有點 - 概念證明,包含用於更改狀態、直接 DOM 更新和重新渲染的按鈕:
來自 codepen 的代碼片段:
illegalUpdate() {
// Illegal direct DOM update,
// to check whether component is destroyed after re-render
document.getElementById("id1").style.backgroundColor = "red";
}
render() {
...
return (
<div>
{component1}
{component2}
<p><button onClick ={() => this.illegalUpdate()}>
</div>
);
}
概括:
進一步實驗: - 如果您合法地將組件類型從 p 更改為 H1,反之亦然,react 將替換整個 DOM 元素。 那么組件將再次顯示為綠色。
如需進一步閱讀,您還可以查看有關高級性能的反應頁面,其中對應用於組件樹的虛擬 dom 和渲染(包括shouldComponentUpdate
作用)進行了很好的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.