国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

偷懶不可?。篟eact中DOM

Godtoy / 2604人閱讀

摘要:獲取來判斷國際化環(huán)境是否為中文。完蛋,又回到原點(diǎn),需要保持狀態(tài)不變又與需要變化的組件有交互關(guān)聯(lián)的還是要被影響。目前還沒有找到原因,探索中。。。

起因

初出茅廬的我一猛子扎進(jìn)React的海洋,掙扎的過程中可謂使勁渾身解數(shù),只要是React文檔中有提到過的,無所不用其極。最后,在前輩的熏陶還有編寫項(xiàng)目和自我學(xué)習(xí)中,規(guī)范性也越來越強(qiáng),思路也越來越清晰——狗刨終于進(jìn)化成自由泳。
這篇文章中呢,起因就是在實(shí)現(xiàn)一些需求的時(shí)候,通篇React語法中加入了古老的DOM讀寫,然后就被老大批評(píng)了。青少年最不缺的就是銳氣和鉆研精神,哈哈,沒錯(cuò),寫這篇文章最大的原因就是——我不服~
為啥不讓我用DOM?DOM有什么不好?React很難實(shí)現(xiàn)的需求應(yīng)該怎么做?

結(jié)果

沒錯(cuò),結(jié)果就是——服。在經(jīng)歷許多代碼重構(gòu)和邏輯修改后,發(fā)現(xiàn)React中有個(gè)DOM從視覺上感覺就有些不爽,不加上注釋或者即使加上注釋都給人一種不知所謂的感覺,維護(hù)上也有很大難度,比如

if (this.tableIsOpen) { // 表格自展開
  setTimeout(() => {
    const openClick = document.querySelectorAll(".testToggle");
    for (let i = 0; i < openClick.length; i += 1) {
      openClick[i].click();
    }
  }, 10);
}

當(dāng)然最主要的是性能,因?yàn)镽eact在DOM二次渲染時(shí)的效率會(huì)比原生DOM的效率高的多,所以會(huì)有更好的方式去解決。下面就來具體的說一下。

過程 用DOM的場景

1、在已有組件的基礎(chǔ)上,待組件渲染完成后,調(diào)用其內(nèi)部的方法。比如uxcore-table實(shí)現(xiàn)二級(jí)表格自展開時(shí),需要調(diào)用組件元素中綁定的toggleSubComp(rowData)
2、DOM獲取document.body.className來判斷國際化環(huán)境是否為中文。
3、多個(gè)組件,一個(gè)組件的狀態(tài)需要保持不變,但是其他組件需要根據(jù)交互來改變狀態(tài)。例如


    
        
    
    

可優(yōu)化方案 1

首先說第三個(gè)場景,說到改變狀態(tài)當(dāng)然就是statesetState,那么順著這個(gè)思路走的話,好的,分割好每個(gè)組件,各個(gè)組件的方法最好不能有交叉。
然并卵,一旦各個(gè)組件之間有了交互上的關(guān)聯(lián),狀態(tài)改變條件互相依賴,即使讓各種props穿插傳遞狀態(tài)條件,但是,props的變化對(duì)于需要接收它的組件,componentWillReceiveProps(nextprops)在父級(jí)有變化(setState)時(shí),才會(huì)接收新的props。完蛋,又回到原點(diǎn),需要保持狀態(tài)不變又與需要變化的組件有交互關(guān)聯(lián)的還是要被setState影響。
所以,用DOM吧。。。但是,用DOM修改元素,是很影響性能的,下個(gè)小結(jié)會(huì)說。其實(shí)這個(gè)思路其實(shí)并沒有錯(cuò),這個(gè)時(shí)候就要用到react專門為一些特殊情況準(zhǔn)備的refs,官方文檔上說:ref添加到Compoennt上獲取的是Compoennt實(shí)例,添加到原生HTML上獲取的是DOM

When attaching a ref to a DOM component like 
, you get the DOM node back; when attaching a ref to a composite component like , you"ll get the React class instance. In the latter case, you can call methods on that component if any are exposed in its class definition.

這個(gè)意思,就是我在自己的class xxx extends React.Component的組件上加上refs中,獲取的是虛擬DOM節(jié)點(diǎn)(ReactElement),那么,就好說了,再也不用亂搞一氣的props還有原生DOM的一堆改變樣式的操作,在組件內(nèi)部寫方法,然后根據(jù)父級(jí)狀態(tài)條件,利用this.refs.xxx.fn(status)調(diào)用即可。

2

第二個(gè)場景,個(gè)人感覺并沒有影響到性能,畢竟React的組件在標(biāo)簽中,瀏覽器解析html的時(shí)候,在React的組件加載前,元素已經(jīng)存在,單純的查詢DOM不會(huì)導(dǎo)致頁面的重寫和回流。所以個(gè)人認(rèn)為,React中還是可以少量用一些無關(guān)痛癢的DOM(我會(huì)說我還是鐘愛原生DOM嗎)。

3

第一個(gè)場景,最開始舉的例子。用于componentDidMount中,哈哈,死循環(huán)——在展開二級(jí)表格時(shí)不斷的從新渲染繼而不斷調(diào)用該方法,那么用在componentDidUpdate中就可以了,但是為什么要用定時(shí)器呢,因?yàn)樵谠毓?jié)點(diǎn)全部渲染出來時(shí),只會(huì)在最后一個(gè)元素執(zhí)行點(diǎn)擊事件,用refs也是一樣的。
目前還沒有找到原因,探索中。。。如果有大大知道,可以告訴我啊~不勝感激^ο^

DOM影響React性能分析

對(duì)于性能的影響,很明顯了,就是多余的DOM計(jì)算。既然React用的虛擬DOM形式,再用DOM去修改,那么,瀏覽器再計(jì)算全部React的更改后,再去計(jì)算一遍原生DOM修改,這就非常尷尬了,React還不如不去用,也沒有節(jié)約多少時(shí)間。
再次整體用React中穿插DOM看著也不是很美觀。

總結(jié)

在應(yīng)用一個(gè)框架的時(shí)候,那么,我們不但要理解它的思想,還要嚴(yán)格的執(zhí)行它,當(dāng)然這個(gè)思想必須是正確的,高效的。比如React的虛擬DOM,就要在虛擬DOM中操作。
如果代碼不遵循它的思想,那么就相當(dāng)于不承認(rèn)這個(gè)框架,這種沖突如果出現(xiàn),要么重構(gòu)代碼,要么就摒棄這個(gè)框架。
以上是本人這個(gè)小前端的一點(diǎn)經(jīng)驗(yàn)和淺見,希望大家給予指正~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82422.html

相關(guān)文章

  • </2016><2017>

    摘要:不覺間,已悄然離去恍然后,正慢慢襲來。已完成一期內(nèi)容,只包含買家點(diǎn)餐功能,二期準(zhǔn)備做賣家及支付功能。經(jīng)過考慮和評(píng)估,我決定對(duì)這兩個(gè)選擇進(jìn)行一個(gè)折中。項(xiàng)目部署,及代理轉(zhuǎn)發(fā)等配置。發(fā)現(xiàn)最近,已經(jīng)對(duì)非技術(shù)類書籍少了很多興趣。 不覺間,2016已悄然離去;恍然后,2017正慢慢襲來。 又到了總結(jié)過去,展望未來的時(shí)候了,那就先總結(jié)16年的收獲和經(jīng)驗(yàn)教訓(xùn),再展望17年對(duì)自己及行業(yè)的一些期望吧。 1...

    wangshijun 評(píng)論0 收藏0
  • </2016><2017>

    摘要:不覺間,已悄然離去恍然后,正慢慢襲來。已完成一期內(nèi)容,只包含買家點(diǎn)餐功能,二期準(zhǔn)備做賣家及支付功能。經(jīng)過考慮和評(píng)估,我決定對(duì)這兩個(gè)選擇進(jìn)行一個(gè)折中。項(xiàng)目部署,及代理轉(zhuǎn)發(fā)等配置。發(fā)現(xiàn)最近,已經(jīng)對(duì)非技術(shù)類書籍少了很多興趣。 不覺間,2016已悄然離去;恍然后,2017正慢慢襲來。 又到了總結(jié)過去,展望未來的時(shí)候了,那就先總結(jié)16年的收獲和經(jīng)驗(yàn)教訓(xùn),再展望17年對(duì)自己及行業(yè)的一些期望吧。 1...

    fxp 評(píng)論0 收藏0
  • React 導(dǎo)讀(三)

    摘要:場景為了更清晰的安排年前年后的工作和值班,現(xiàn)在要對(duì)過年期間人員請(qǐng)假的情況進(jìn)行統(tǒng)計(jì),并且進(jìn)行一個(gè)簡單的管理。我們現(xiàn)在來訂閱一個(gè)名為的事件,用來表示表格中需要展示每條數(shù)據(jù)。 前言 React 導(dǎo)讀(一)React 導(dǎo)讀(二) 在之前 2 篇文章中中學(xué)習(xí)到了寫第一個(gè) Web 組件以及常用的生命周期函數(shù)的使用,這篇文章將繼續(xù)之前的目錄,開始新的知識(shí)點(diǎn)補(bǔ)充: [x] React 如何編寫 He...

    zzir 評(píng)論0 收藏0
  • Vue.js最佳實(shí)踐(五招讓你成為Vue.js大師)

    摘要:但如果你想更加高效地使用來開發(fā),成為大師,那下面我要傳授的這五招你一定得認(rèn)真學(xué)習(xí)一下了。雖然損失了一丟丟性能,但避免了無限的。所以我們需要設(shè)置,這些默認(rèn)行為將會(huì)被去掉以上兩點(diǎn)的優(yōu)化才能成功。陸續(xù)可能還會(huì)更新一些別的招數(shù),敬請(qǐng)期待。 本文面向?qū)ο笫怯幸欢╒ue.js編程經(jīng)驗(yàn)的開發(fā)者。如果有人需要Vue.js入門系列的文章可以在評(píng)論區(qū)告訴我,有空就給你們寫。 對(duì)大部分人來說,掌握Vue.j...

    CocoaChina 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<