概述
由于对三大框架都有一定经验,可以一句话总结三大平台开发体验:
- Angular的极限面向对象处理复杂业务非常舒适,但是对于轮子兄弟极其不友好,没有CDK你就只能抓瞎,一句话:高楼大厦,攀登不易。
- React的Hooks有很强的Hacky精神,零星几个API,绝大部分需求皆可实现,一句话:步步为营,跬步千里。
- Vue的API数量适中,基础设施完善,文档友好,概念与Angular和React都互通,一句话:百家之长,指哪打哪。
至于开发大型后台管理项目,这个其实有很多前置条件的,三大平台的优势其实和你开发什么项目无关,和人员构成和项目资源才是密切相关的。
Angular
Angular实际上是纯粹的自顶向下,复用设计模式,Rxjs+事件驱动对人员要求太高,如果你的需求频繁变更,并且有很多自定义的特殊需求,Angular应该就是和你无缘了。
但是如果你的产品经理能够给到UML,甚至直接生成ts代码,并且你对产品可用度要求极高,那Angular就是为你准备的。
反正大多数互联网企业,说不定企业的命都没有大公司的一个大型项目周期长,没必要对“前端”这个领域有这么高的可用性要求。
类似AD这样的产品,都是本身工业化程度非常高了,分工体系都遍布全球了,才有将“Angular”“附加“在其项目上的需求。
毕竟,谷歌的问题不一定是你的问题,就连谷歌自己,都不是每个项目甚至大多数项目都没有这个需求,youtube,cloud,甚至AD的入口页面,都用不到。国内也就BAT,TMT的主营业务有这样的需求吧?
React
React是纯粹的自底向上,理论上来说,只要你能一层层封装,开发应用就是点出来或者括号出来的事。
但是,如果公司没有基础的UI库,功能组件库,从头开始一点点往上爬,用React有点龟速。当然,如果公司不担心庞大的第三方库的安全性的话,React也是可以的,只是这样,和接下来要介绍的Vue,有什么区别?因为封装本身就会降低灵活性,递弱代偿。
React社区库都有一个特点,越来越碎片化,比如react-router,material-ui,这么做的原因是,大家都知道React的优势就是自定义和渐进式,把粒度做小有利于用户的二次封装。公司有自己的一套VIS,有出色的前端工程师,在前端领域有核心技术(比如图形之类的),用React可以很好地陪伴公司成长,毕竟React本身只解决View问题。
其实用Angular配合React也是可以的,或者说,Angular对web component的支持是所有框架里面最好的,一个module,注入服务,viewContainer,限定封装方式,就可以办到,理论上是这样的。React的关注点是函数。
Vue
Vue是组件,领域没有React那么小,但也没有Angular的Module那么大,正好是个折中方案。基于component的封装和渲染,使得制作Vue库的复杂度比React稍高,但是却比Angular轻松,好消息是很多库都有官方方案,因此无需自行封装。对JSX的支持又使得其对两种开发范式都有支持,比如很多UI库,尤其是不那么早期的,比如iView,vuetify,都是采用JSX或者render开发的。
所以Vue特别适合基础设施差的公司,国内大部分公司的前端建设都属于起步阶段,采用Vue是非常合理的,这也和Vue大热的现状不谋而合。
总结
总结来说,选什么技术和你开发什么项目关系不大,应该更多考虑公司现状和个人现状。但是,学什么就有点重要了。像Angular这种框架,他刚出的时候我是非常兴奋的,经常给人推荐,给人讲解,但是后来才发现,讲解太多领域驱动,设计模式,响应式函数式之类的概念,用不到,也是抓瞎。技术和需求不匹配,就有点炫技的味道了,用不到某项技术,其实有可能是公司的问题和自己个人的问题,问题不应该出在技术上,毕竟Google已经验证了这套技术的有效性,甚至本身就是为了解决Google遇到的问题而被开发出来的。
但是,学过和没学过差别非常大,学过Angular,理解了面相对象的使用和封装方式,以及ts的运用,体会到了interface,class等几种类型声明的利弊,你就不会说出像:有了ts开发体验都一样的话了。运用Angular的概念,可以很容易地在其他平台写出优雅的业务代码,工作会更加轻松。同样,运用React的概念,涉及到渲染细节的问题是,你也不会两眼抓瞎。
Vue的定位和当前的市场环境决定了,国内大概率会走向大规模运用Vue的情况的,但是产业会升级,如果技术平台不能改变,那就是靠提高人员素质的方向发展了。Vue借鉴了Angular和React平台的很多概念,如果你两Angular和React基本理论都不熟悉,能够灵活运用好它么?
Vue今后会怎么发展?React的async render和hooks应该会得到运用,这个是个大概率的事情,Vue3已经证实,毕竟现在的props机制对typescript极其不友好,性能瓶颈也和16.8以前的React近似,但是Vue依旧会保留自己的核心竞争力,将领域定位在component一级,而不是React的函数。Angular的HTML+也将会成为Vue的发展方向,Vue的模板可编程能力还是太弱了,不管是给编辑器集成一个languageService,还是模板中直接写模板引用变量,都应该得到支持。
所以,你以为学一个框架就够了?实际上是,每个框架都是必须的,没有一个绕得过。