React是一種思想走敌,F(xiàn)acebook對于Web Components的理解與實(shí)現(xiàn)。其中ReactJS是Web端强品,React Native是iOS端(將要出Android端)。值得注意的是React Native寫的應(yīng)用是Native App,而不是Hybrid App愉耙。最后React其理念是“Learn once, write anywhere”,所以目前Web和Mobile端可能要寫兩套代碼拌滋。
1.react Js的目的是為了使前端的V層更具組件化朴沿,能更好的復(fù)用,它能夠使用簡單的html標(biāo)簽創(chuàng)建更多的自定義組件標(biāo)簽败砂,內(nèi)部綁定事件赌渣,同時可以讓你從操作dom中解脫出來,只需要操作數(shù)據(jù)就會改變相應(yīng)的dom昌犹。
2.react native的目的是用前端的技術(shù)將jsx通過babel編譯成reactElement坚芜,在創(chuàng)建對應(yīng)的原生組件在移動端運(yùn)行的app,但是性能可能比原聲app差一點(diǎn)斜姥。
3.react和react native的底層原理是相同的鸿竖,都是使用js實(shí)現(xiàn)虛擬dom樹來驅(qū)動頁面的渲染,react是驅(qū)動HTML dom的渲染铸敏,react native是驅(qū)動原生組件的渲染缚忧。
4.二者都是基于組件(component)開發(fā),然后組件和組件之間通過props傳遞方法搞坝,每個組件都有一個狀態(tài)(state)搔谴,當(dāng)某個方法改變了這個狀態(tài)值時,整個組件就會重繪桩撮,從而達(dá)到刷新敦第。另外,說到重繪就要提到虛擬dom了店量,就是用js模擬dom結(jié)構(gòu)芜果,等整個組件的dom更新完畢,它會有一個diff的過程融师,對比出哪些組件發(fā)生了變化右钾,然后才渲染到頁面,簡單來說只更新了相比之前改變了的部分,而不是全部刷新舀射,所以效率很高窘茁。
虛擬DOM(Virtual DOM)的機(jī)制:在瀏覽器端用Javascript實(shí)現(xiàn)了一套DOM API〈嘌蹋基于React進(jìn)行開發(fā)時所有的DOM構(gòu)造都是通過虛擬DOM進(jìn)行山林,每當(dāng)數(shù)據(jù)變化時,React都會重新構(gòu)建整個DOM樹邢羔,然后React將當(dāng)前整個DOM樹和上一次的DOM樹進(jìn)行對比驼抹,得到DOM結(jié)構(gòu)的區(qū)別,然后僅僅將需要變化的部分進(jìn)行實(shí)際的瀏覽器DOM更新拜鹤。而且React能夠批處理虛擬DOM的刷新框冀,在一個事件循環(huán)(Event Loop)內(nèi)的兩次數(shù)據(jù)變化會被合并。