自我描述一下,我大学毕业后自学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的受众比较的尴尬