我不在乎哪个框架更好,我只在乎它让我少掉多少头发

🔑 关键词:前端框架, React, Vue, Angular, 状态管理

📖 摘要:一个10年开发对框架对比的真心话,没有结论,只有经验。

头一回有人问我用React好还是Vue好,是在2018年。那时候我刚把jQuery项目重写成Angular,结果公司第二天就宣布要改用React。我的第一反应是:又要重新学一遍生命周期?当时我盯着屏幕上的Angular模块装饰器,心里想着:这半年我写的这些类,难道都要变成函数式组件?同事安慰我说React更简单,我信了。然后我花了两周时间把Angular的依赖注入逻辑改成useState,结果第三天就踩了闭包的坑。

图片

你猜怎么着,其实框架选择的背后,是你愿意接受多大的混乱。Angular给你的是一套完整的规矩,从依赖注入到模块系统,甚至命名都希望统一。它的理想是打造一个标准的软件工程体系,所以你会感到安全,但同时你会发现,想在Angular里做一件小事,需要写很多模板代码。之前我做一个表单,Angular的FormGroup让我怀疑人生,而React只要一个useState就够了。但后来项目大了,React的自由变成了灾难,没有人能约定hooks该怎么组织,代码像一座垃圾堆。

图片

再看看Vue,它就像一个温和的民主派。模板语法让你容易上手,但复杂的逻辑你又可以写render函数或composition API,它不强求你站队。然而这种温和带来的问题是你永远不知道哪些功能是“官方推荐”的,哪些是“社区自留地”。比如Vue2时代,vuex和mobx的选择我记得我纠结了很久。这种所谓的灵活,其实也是一种不安全感。

图片

我发现一个讽刺的现象:Angular开发者嘲笑React的混乱,React开发者嘲笑Angular的僵硬,而Vue开发者一边看两边战争一边偷偷写代码。但真正到了项目里,你会发现每个框架都会在你最意想不到的地方卡住。我一个项目用React,为了优化性能,我需要记忆化每个组件,useMemo和useCallback的依赖数组比我的生日还难记。另一个项目用Vue3,一切正常,但当我试图实现一个复杂的跨组件状态流时,ref和reactive的响应式陷阱差点让我把键盘吃下去。

图片

所以我的观点是:框架的战争本质上是两种人格的对立——控制欲强的人喜欢Angular,自由主义者喜欢React,实用主义者喜欢Vue。但人类的问题是,我们总想找一个万能的答案,于是不停换框架。说实话,我最近又回到了原生JS写一个小玩意儿,那种感觉就像逃离了都市回到乡村,没有构建步骤,没有依赖树,仿佛回到了2009年。但这个选择并不适用于团队。

图片

也许真正的新独立观点是:我们过度追求框架的轻量或强大,却忽略了框架是团队沟通的介质。一个团队用Angular,意味着你的代码风格可以得到强制统一,而用React团队就要自己发明一套规则。Vue是中庸,但中庸有时意味着没人真正负责。因此,在选择框架前,先审视你的团队从灵魂深处是懒散还是严谨。否则,再怎么比较,都是浪费生命。

图片

🏷️ 标签: