今晚我們來搞一搞Vue和React的對比好吧,話不多說今天我們直接開搞可好,各位小老板,開始吧
1. react整體是函數式的思想,把組件設計成純組件,狀態和邏輯通過參數傳入, 所以在react中,是單向數據流,推崇結合immutable來實現數據不可變。 react在setState之后會重新走渲染的流程,如果shouldComponentUpdate返回的是true,就繼續渲染, 如果返回了false,就不會重新渲染,PureComponent就是重寫了shouldComponentUpdate, 然后在里面作了props和state的淺層對比;
而vue的思想是響應式的,也就是基於是數據可變的,通過對每一個屬性建立Watcher來監聽, 當屬性變化的時候,響應式的更新對應的虛擬dom
2.react的性能優化需要手動去做,而vue的性能優化是自動的,但是vue的響應式機制也有問題, 就是當state特別多的時候,Watcher也會很多,會導致卡頓,所以大型應用(狀態特別多的)一般用react,更加可控
詳解:vue組件在初始化時會通過Object.defineProperty對每一個data屬性建立對應的Wather,然后在模板編譯時收集依賴。以后只要修改data的任何一個屬性,就會觸發視圖的重新渲染,而且是精確的修改對應的vdom
react的機制是每次setState的時候,調用shouldComponentUpdate,判斷state或props改變需不需要重新render,如果返回true才會渲染。默認的實現是返回true,PureComponent的shouldComponnentUpdate淺層對比了兩次state,考慮到性能,需要寫好shouldComponentUpdate。
3. react的思路是all in js,通過js來生成html, 所以設計了jsx,還有通過js來操作css,社區的styled-component、jss等
vue是把html,css,js組合到一起,用各自的處理方式,vue有單文件組件, 可以把html、css、js寫到一個文件中,html提供了模板引擎來處理
詳解:react渲染是使用jsx,用js來操作html,列表渲染、條件判斷等都通過js來控制,而vue提供了模板的語法,支持指令、過濾器等模板功能,簡化了渲染邏輯。在react組件里需要寫大段js才能描述清楚的邏輯,使用vue的模板可以很簡潔緊湊的表明。
模板和jsx各有優缺點,jsx全部使用js來寫邏輯,更加的靈活,也沒什么學習成本,但是有些渲染邏輯表達會比較啰嗦。 模板因為是專門針對渲染設計的DSL,所以寫一些渲染邏輯時會特別的簡潔和緊湊,但學習成本高一些,並且擴展需要通過指令和過濾器的方式。
4.react是類式的寫法,api很少 而vue是聲明式的寫法,通過傳入各種options,api和參數都很多。 所以react結合typescript更容易一起寫,vue稍微復雜。 vue結合vue-class-component也可以實現類式的寫法,但是還是需要通過decorator來添加聲明,並不純粹
5.react可以通過高階組件(Higher Order Components--HOC)來擴展,而vue需要通過mixins來擴展 React剛開始也有mixin的寫法,通過React.createClass的api,不過現在很少用了。 Vue也不是不能實現高階組件,只是特別麻煩,因為Vue對與組件的option做了各種處理, 想實現高階組件就要知道每一個option是怎么處理的,然后正確的設置。
6.react做的事情很少,很多都交給社區去做,交給社區去做的優勢是可以產生很多優秀的方案,但是會增加技術棧的學習成本和上手難度。
vue很多東西都是內置的,寫起來確實方便一些,內置的優勢是技術棧學習成本低、上手快,但是方案變得不可替換了。
總結:濃縮出來就是 思性路寫擴射 這六個字的簡便記憶方法我不便給你們描述,我相信你們能悟出來,實在想知道的私信我好吧
參考文檔:
從2張運行流程圖看vue和react區別:https://www.jianshu.com/p/1ebe36fbdcda
今天就到這里了,各位繼續加油!!!