使用ReactJs的感受

最近使用react做了一個(gè)人事管理平臺(tái)的單頁(yè)面應(yīng)用(SPA),最開(kāi)始的時(shí)候,是使用avalonjs,后臺(tái)因?yàn)槔习逑矚g阿里團(tuán)隊(duì)的ant design組件,所以就推倒重來(lái),重新用react開(kāi)發(fā)全新的前端。在這之中,也看了Vue的文檔,之前也使用過(guò)Angularjs,幾乎流行的js框架都使用過(guò),在這里談?wù)勈褂胷eactjs開(kāi)發(fā)的感受。

繁瑣

與avalon和Vue等MVVM框架直接把對(duì)象綁定在vm對(duì)象上相比,react使用了state作為狀態(tài)機(jī),state上綁定的對(duì)象發(fā)生變化,會(huì)自動(dòng)展現(xiàn)在dom節(jié)點(diǎn)上。然而,綁定歸綁定,如果dom節(jié)點(diǎn)上的value發(fā)生變化,是不會(huì)自動(dòng)表現(xiàn)在state上的,需要手動(dòng)加上onChang、onClick等事件,所以很多的時(shí)間,很多的代碼都消耗在屬性的綁定上,如果時(shí)間有限,真正用于業(yè)務(wù)邏輯編寫(xiě)的時(shí)間并不多。這一點(diǎn),沒(méi)有MVVM框架方便。

組件間通信不方便

react組件之間的通信,是通過(guò)props屬性來(lái)傳遞的,父組件想要傳遞參數(shù)給子組件,需要通過(guò)props屬性層層傳遞,如果組件嵌套過(guò)深,就需要借助signal包(據(jù)說(shuō)fb官方在使用)來(lái)傳遞信號(hào),而signal包中主要的方法adddispatch調(diào)用是散落在不同頁(yè)面的不同地方,單從代碼上看不出邏輯關(guān)系,在沒(méi)有注釋的情況下會(huì)非常令人費(fèi)解。對(duì)于MVVM框架,組件間的調(diào)用直觀(guān),方便,使用起來(lái)就像這樣:

vmFather = {
   show:function(){
    console.log("I am father component,I have displayed");
  }
}
vmSon = {
  callFatherShow:function(){
    vmFather.show();
  }
}
vmSon.callFatherShow();

代碼不直觀(guān)

雖然形式上看來(lái)還是基本的html網(wǎng)頁(yè)結(jié)構(gòu),但是當(dāng)中可能摻雜了許多的業(yè)務(wù)邏輯和模板符號(hào),需要比較大的認(rèn)知成本。

沒(méi)有更快

react以沒(méi)有多余的dom渲染著稱(chēng),它給我們一個(gè)錯(cuò)覺(jué),就是react渲染頁(yè)面更快,并且性能優(yōu)良,體驗(yàn)流暢。然而并不是這樣,如果不是極端的情況,非常頻繁的刷新dom,react其實(shí)還比別的框架慢一些。

盡管如此,組件化的思維還是讓人驚嘆這個(gè)框架開(kāi)發(fā)者的想象力,react在我的使用體驗(yàn)中,帶給我的坑遠(yuǎn)比方便要多,但是,它依然是一個(gè)很好的框架,在對(duì)這個(gè)框架有足夠了解的情況下,的確能開(kāi)發(fā)出很好的應(yīng)用。所以,如果一定要使用react開(kāi)發(fā)的話(huà),需要注意以下幾點(diǎn):

不要過(guò)度組件化

是的,不要過(guò)度。不要在開(kāi)發(fā)的時(shí)候過(guò)度的想去復(fù)用,事實(shí)上,許多頁(yè)面開(kāi)發(fā)出來(lái)后,原本想要加上通用接口作為一個(gè)新組件的“組件”最后都沒(méi)有再被使用。大多數(shù)的時(shí)候,最后還是像書(shū)寫(xiě)html頁(yè)面那樣書(shū)寫(xiě)react,就是把一個(gè)頁(yè)面的view包含在一個(gè)render里(我知道這看起來(lái)會(huì)很長(zhǎng)很復(fù)雜),這樣會(huì)避免許多不必要的組件間的通信,業(yè)務(wù)邏輯聚合在一起,無(wú)論開(kāi)發(fā),調(diào)試和重構(gòu)都是有利的。

組件應(yīng)足夠的小

組件像一個(gè)按鈕,一個(gè)tab,一個(gè)radio組,一個(gè)select,這樣粒度的組件就可以了,再大的組件并非不可開(kāi)發(fā),只是會(huì)失去通用性。所以,要傾向于開(kāi)發(fā)細(xì)粒度的組件,然后把這些組件組合在一起,形成一個(gè)有完整邏輯的頁(yè)面。

幾乎所有的前端團(tuán)隊(duì)如阿里,qunaer,ele.me都在積極為大家提供大而全的組件,然而,在實(shí)際的應(yīng)用中,不會(huì)被重構(gòu)的只有那些功能很簡(jiǎn)單的組件,組件的API再健全,能覆蓋的范圍依然是有限的。所以,無(wú)論是react還是MVVM框架,在使用大公司的開(kāi)源組件時(shí),當(dāng)然會(huì)節(jié)省一些時(shí)間,但是只要業(yè)務(wù)邏輯稍微復(fù)雜,就發(fā)現(xiàn)很多組件無(wú)法排上用場(chǎng)。
如果還有機(jī)會(huì)開(kāi)發(fā)單頁(yè)面應(yīng)用(SPA),我會(huì)試試Vue。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 陽(yáng)臺(tái)成長(zhǎng)的尾聲,瓜熟桃落的景象,放在手里的喜悅,鼻孔飄來(lái)的香甜,仿若吞咽的同時(shí)又告別了一個(gè)秋…………
    smile絲嘜小主閱讀 497評(píng)論 0 1
  • 1、碗掉下來(lái),天大個(gè)疤 2、一次文藝晚會(huì),主持人上臺(tái)報(bào)幕:下面請(qǐng)欣賞:新疆歌舞,掀起你的頭蓋骨!毛骨悚然?。。。?!...
    校園生活隨記閱讀 188評(píng)論 0 0
  • 北風(fēng)又投訴 新房那盞紅燈籠 不是冬的景色 主人用酒杯邀你入座 滿(mǎn)屋喜氣撲面而來(lái) 你不好意思退出來(lái) 又跑到張嬸家串門(mén)...
    挑夫閱讀 270評(píng)論 30 56

友情鏈接更多精彩內(nèi)容