react對底層的**作了封裝,在大多數情況下,我們不需要直接去操作dom。但是有時候我們還是需要使用到底層的**的,比如輸入框獲取焦點,這個時候可以通過第三方的類庫或者react提供的api實現。
react之所以快,是因為它不直接操作dom。react將dom結構儲存在記憶體中,然後同render()的返回內容進行比較,計算出需要改動的地方,最後才反映到dom中。
此外,react實現了一套完整的事件合成機制,能夠保持事件冒泡的一致性,跨瀏覽器執行。甚至可以在ie8中使用html5的事件。
大部分情況下,我們都是在構建react的元件,也就是操作虛擬dom。但是有時候我們需要訪問底層的api,可能或通過使用第三方的外掛程式來實現我們的功能,如jquery。react也提供了介面讓我們操作底層api。
為了同瀏覽器互動,我們有時候需要獲取到真實的dom節點。我們可以通過呼叫react的react.finddomnode(component)獲取到元件中真實的dom。
react.finddomnode()只在mounted元件中呼叫,mounted元件就是已經渲染在瀏覽器dom結構中的元件。如果你在元件的render()方法中呼叫react.finddomnode()就會丟擲異常。看官方的示例:
var mycomponent = react.createclass(,
render: function()
});react.render(
, document.getelementbyid('example')
);
元件的生命週期主要由三個部分組成:
react提供了方法,讓我們在元件狀態更新的時候呼叫,will標識狀態開始之前,did表示狀態完成後。例如componentwillmount就表示元件被插入dom之前。
React虛擬DOM轉換為真實DOM
按照上面的猜想,那麼render方法的作用就是 render方法接收兩個引數,第二個引數沒什麼好說的,固定寫法,第乙個引數有以下幾種情況 類元件函式元件 文字 數字 class extends component 然後再來處理函式元件,函式元件的寫法是,直接就返回了dom 對於文字 數字,直接新增到...
React 中的虛擬DOM
react 的重新渲染,效能是很高的。因為它引入了虛擬dom的概念。呃,來看一下,render 函式渲染頁面的幾種做法。前兩步都是拿到state 資料 與 jsx模版。第一種就是比較樸素的方式。第二種方式雖然不用完全替換,但是也需要比對兩個dom。第三種是虛擬dom方式。虛擬dom 本質上就是 js...
React 重溫之 虛擬DOM
虛擬dom可以說是現代前端庫的標配了,好像你乙個前端框架不實現乙個虛擬dom出門都不好意思跟人打招呼,那麼到底什麼是虛擬dom呢?那麼與之相對應的,我們可以簡單理解成虛擬dom就是用其他語言模擬出乙個dom的樹形結構 那麼問題來了,為什麼要用其它語言模擬dom,人家本來就已經是乙個很完整的樹形結構物...