namelosw
2021-03-10 11:50:51 +08:00
React 和 Angular 和 AngularJS 我都用过好多年, 而且 Angular 2 出来之前我就已经很熟 Rx 和 TS 了, 简单结论: 别学别用 Angular.
Angular 扩展性可维护性其实都不如 React/Vue, 而且复杂得一批, 细节还特别坑, 很多互相矛盾的地方. 每个地方技术实现上看都可以, 拼起来就是个渣, 给人一种“没有产品经理”, 想起来啥就做啥的感觉.
说 Angular 好的基本就是几种:
1. 后端不懂前端, 觉得看着熟悉.
2. 熟悉 React 和 Vue, 但不那么熟悉 Angular, 别人家的草更绿.
3. 只熟悉 Angular, 所以互相没比较.
4. 做的东西太简单, 用 Angular 还没撞墙.
总得来说 Angular 给人的感觉就是不咋懂前端的问题:
1. 鼓励 MVVM 把状态分散到组件, 不像 React 那样鼓励 Hoisting. 你必须玩命给同事洗脑要 Hoisting, 要用状态管理, 不然写着写着状态就分散到全世界, 到处都不同步.
2. 更新也是个大坑, 用 push only 满地都是 markForCheck. 导致写库和写业务代码完全不一样, 导致 Angular 用户大部分都不会写库, 有种重新发明了手动挡…吧 JS 改造成 C++的感觉.
3. 不用 push only 的时候还是 AngularJS 那一套, 靠 Zone 排队, 问题是即便这样很多地方还是要手动 runInZone, 这个问题根本无解, 特别容易造成隐性 bug, 跟 React/Vue 比一开始设计思路根本就是错的.
4. 扩展性, 抽象性好嘛? 还不是被高阶组件, hooks, render callback 吊打. OO 在这方面只能说菜得抠脚, 而且<ng-container> <ng-template> <ng-content>不仅迷惑, 而且加起来也被 props.children 吊打.
Angular 也不是一无是处, 偶尔有点闪光点:
1. Reactive form, 和 UI 解耦的 form, React 和 Vue 明显也可以做, 但是不知道为啥大家都不用.
2. Async pipe, 既然发明了 template 引擎, 就得好一点…
3. AOT? AOT 也不能算闪光点, 因为前面的屎山堆太多, 编译起来太大了, 只能用这种高级操作挽回一点点. 而且跟 Svelte 比就是弟弟.