自我描述一下,我大學畢業後自學java參加工作,leader要求我學會Angular,然後開始了一年半的開發,前後端都有寫過代碼,前端居多,使用Angular8/9。現在離職,準備跳槽拿一份更高的薪水,最近在家自學Vue和React,它們的一些用法,或者語法,讓我感覺有些不適。(希望不要用java程序員更喜歡Angular,或者Angular就是後端那一套這種答案來回答我,我認為不是這個原因,另外我只是個菜鳥,無法從底層深度去評價框架,只是覺得它們的語法/用法讓我不適)
先從Vue說起,其實一開始學Vue還是覺得挺不錯的,很多東西和Angular的用法很像,讓我產生嚴重排斥感的是Vuex:
- 首先,所謂狀態管理,也就是多組件共享變數,在Angular里直接創建一個service.ts文件就搞定,裡面直接寫你需要共享的變數和方法就可以,而Vue還需要安裝Vuex,裡面還分state,mutation
- 其次,Vuex的用法太奇怪了,取變數還好,但是當我要更新state里的變數,居然要用commit,如果有非同步更新還需要額外做一次action,還需要傳遞一個方法名字元串?這是什麼詭異的用法?
- Vuex可以分模塊,每個模塊里有各自的state,mutations,actions,在組件里要調用模塊里的state,就需要模塊的名字,而調用mutation或者action又不需要名字,也就是說它們是全局的,那就意味著不能出現重名,模塊的名字也不能和全局變數重名。我理解模塊化的思想,但是無法理解它的用法。
Vuex只是Vue的一個縮影,這半個月學下來,我覺得Vue的框架感,或者說規矩感太過濃重了,它規定了你數據要放在data里,方法要放在methods里,更新state需要commit,commit需要傳遞方法名,如果非同步更新需要額外dispatch一個action,調用模塊里的狀態有的需要模塊名,有的不需要,這些規矩,都需要人去遵守,去記憶。
React到現在我才學了兩天,但是這個JSX語法讓我甚至覺得比Vue還讓人不適,Vue是規矩性太強,但是它至少做到了html js css的分離,從結構上還是清爽的(雖然沒有做到文件上的分離),而JSX實在是讓我無語,從最初學前端老師就說style和script的三種引入方法,外部引入是最好的,可以解耦,JSX是在顛覆這種說法嗎?
最後說一下我覺得Angular對比它們的幾個讓人舒服的點:
- ts,css,html 徹徹底底的分離,Vue雖然也分離了,但還是放在了一個文件里的,而Angular中每一個component有它對應的html文件,ts文件,css文件,真的清爽
- 沒有亂七八糟的規矩,要求我必須把數據寫在哪個data里,方法寫在methods里,更新屬性還需要commit什麼的,都沒有。直接定義一個變數,直接用,直接修改,如果需要多個組件共享變數,就創建一個service.ts文件,把共享變數和方法放在service文件里就可以了
- 編輯器的支持很好,這一點真的是不對比不知道,用了vue和react,才發覺編輯器有多重要,webstorm或者idea對Angular的支持,甚至到了Java那種程度,就是你用了哪個變數或者方法,ctrl點擊一下就可以直接跳過去了
- 文檔,在我看來Angular&>Vue&>React
上面說了一大堆,我只是想問,你們用Vue和React的開發體驗到底是怎麼樣的,你們不會覺得不適嗎?Angular的開發體驗那麼好,為什麼國內用的人很少,國外好像也不是特別多呢?
首先的首先,Angular也有類似技術:ngrx,這只是一種近期以來web前端很流行的一種設計模式,不過確實侵入性很強,初學者很難理解。關於angular不溫不火的原因我覺得主要是因為Angular的受眾比較的尷尬