单纯的 CRUD 项目,你会选择 Vue 还是 React?

2018-10-24 17:01:19 +08:00
 iloveyouso

我先来一个,我选 Vue,原因如下:
1,Vue 有官方支持的<keep-alive>,React 没有或者是要自己去实现一遍,实现不好还容易踩坑,没有大量使用案例做经验支撑。而且 Vue 的 keepalive 组件还可以保持所有 DOM 各个细节的状态,React 必须把 state 都放在 store 里面,繁琐的要死
2,Vue 也有 JSX 支持,而且 slot 比 React 传入的 JSX props 不知道要直观到哪里去了,看起来很直接方便
3,Vue 管理依赖跟踪很方便,不会像 React 那样又要 setState 又要 this.props.onChange(),而且 Redux 搞一个状态跟踪要弄三处地方。如果我一个页面有二十来个状态,我就得搞二十来个 reducer。
4,React-Router V4 的 BUG 可以列一长清单,之前踩过好几次坑,比如 this.location.pathname 为空,跳转之后拿不到对应的 params,后来查询发现都是官方自己的 bug 问题。在 Issue 里,可以看到对 V4 的路由 BUG 描述那是十个手指头都列不完,每个 BUG 都可以说比较致命,甚至还有作者和提 Issue 的互骂。</keep-alive>

最主要是 keep-alive 让我一直离不开 Vue,这个特性是 Vue 官方支持且经过大量使用的。
我也曾查询 React 官方对这一特性是否愿意支持,很遗憾他们提供的建议都是让开发者自己造个轮子(比如设置为 display:none),不愿意官方统一开一个类似 React-Router 这样的项目,让使用用户更集中,BUG 更容易被发现,你一个造轮子的项目我一个造轮子的项目,这样的开源库谁敢用啊,无语。

所以 Vue 让我感觉就是一个词:务实。技术风格就像 Java 那样,每个 Api 都经过几十万用户的使用验证,不管对个人 solo 还是团队开发,都能稳步推进项目进度,就算是出问题了也能很快排查出来,不用花费无用功在性能啊 store 同步身上。

而 React 给我的感觉就是:非常 hack 和先进前卫。喜欢偏重概念和思想,虽然看起来很 good 的,但是对一个项目各方面的支持比不上 Vue,耗费大量时间精力做出来的东西,性价比并不高。做着 React 总是没有那种稳定的感觉,而且感觉自己像个码农一样,如果不是十几人起步的团队,我真的不会选择 React,太过于学术派了,不切和开发者体验,那真的是很不好用!!

所以问题来了,你们在做 CRUD 项目时,会用 React 还是 Vue?

5819 次点击
所在节点    程序员
56 条回复
binaryify
2018-10-24 23:09:14 +08:00
选择 Vue
不喜欢 React 把问题都丢给开发者,连路由都没有官方的,React-router 讲真一点都不好用,为了组件化而组件化,问题一大堆,没有 keep-alive 也是个大问题,另外做页面过渡动画也没有 Vue 那么简单
binaryify
2018-10-24 23:10:05 +08:00
还有 React 子组件和父组件通信太麻烦
iloveyouso
2018-10-24 23:43:31 +08:00
@riverxs
1,我并不主张 redux 把所有 state 都放到 store 里面,相反我更希望把组件紧紧关联的自我状态交由组件自己去管理。我所纠结地在于,一个组件在当前页面被用户操作之后,组件状态改变了,更换页面回来会发现 state 居然被清空了。
从用户角度来说,这是并不友好的。我原本用户操作的状态(比如一个 tab 标签选择某一个高亮),居然跳回页面就恢复原样了,这是反直觉的。如果需要实现 keep-alive,你就必须通过一些状态管理库来管理 store 来同步状态。这当然是最佳实践而且优雅至极的方式了,但是对于一些 CRUD 项目来说,十几个 Tab 标签页,五六个 table 并且带有过滤高亮用户点击高亮行功能,渲染起码 2 秒的三四个 echarts 实例,如果你要在页面跳转回来渲染的成本需要多高?就不说这个渲染的问题,就算你能把所有状态都保存下来,做好了各种数据同步的工作->重新获取 store 值->判断是否需要渲染->在组件 mount 的时候做一些初始化的工作,我绝对相信这个性能会大大打折扣,甚至比不上 jQuery 时代的页面,舍本逐末了。
keep-alive 有缓存页面太多导致卡顿的缺点,redux 也有不缓存页面节省空间的优点。但是我觉得不能认为因为 react 可以通过数据管理库来管理状态,从而忽略掉 keep-alive 这一方便开发者的特性。无论是小的 CRUD 项目,还是大型的 ERP 企业应用,keep-alive 这个特性绝对是值得关注的。就我所知的确有开源的 react-keeper,但这并不是官方组件,说不定哪天跟不上 react-router 的搭配,从开发者角度来看并不令人信任。
2,的确是我主观了,各有所好吧
3,都是参考 flux 思想的,Vuex 学习成本的确更低
4,性能两者都是没有明显差距的,能拉开开发效率和性能的恰恰路由、状态管理库这些周边生态。一个开发者如果以相同时间和精力去做一个项目,我相信 Vue 绝对是一把瑞士军刀,无论从:sync 这类语法糖,还是周边生态的完备和用户体验良好,更剩于 react。
5,React 自由发挥空间大,这意味着开发者需要花费时间去精心搭配工具链,如果不巧踩坑了(参考 RR4,这个发布多久还像测试版),又需要花费精力去修复。自由也是有代价的,也正因为这些代价难免让人感受到 React 不安全,从项目技术稳妥和效率上来看,Vue 无疑是更佳。
Lax
2018-10-25 09:24:20 +08:00
看楼上大佬的对比评价,感觉我这种非专职前端的新手用 vue 足够了
azh7138m
2018-10-25 09:33:51 +08:00
> 如果我一个页面有二十来个状态,我就得搞二十来个 reducer。

那还是用 vue 吧,哪个熟悉用哪个。
KuroNekoFan
2018-10-25 09:34:44 +08:00
vue 记忆成本比较高,各种奇奇怪怪的指令
wanghao2018
2018-10-25 09:59:58 +08:00
@KuroNekoFan vue 的指令还好吧,angular 的指令才是多。适当的指令挺方便的 react 面条式的 从上写到下。
sm1314
2018-10-25 10:21:38 +08:00
前几天写了个 crud 的后台管理系统,第一次接触前端,用的基于 reactjs 的 react-admin 框架,发现一个很奇怪的问题,测试的时候一切正常,编译部署之后首次加载正常,刷新后样式错乱。。。如果有下次的话我想我会去试下 vue
shuhao
2018-10-25 11:20:18 +08:00
react + antd 写后台管理系统简直不能更方便;喜欢 jsx 语法,比较灵活
binaryify
2018-10-25 11:36:37 +08:00
@KuroNekoFan 常用的就那几个指令,而且都是实用性的
binaryify
2018-10-25 11:39:30 +08:00
@shuhao 后台管理系统表单多,用 React 很痛苦的
lovelybear
2018-10-25 13:25:12 +08:00
原生 js
TangMonk
2018-10-25 15:28:50 +08:00
SonataAdmin 自动生成后台
wzhndd2
2018-10-25 16:38:07 +08:00
jquery 不好用吗?
Lax
2018-10-25 21:26:10 +08:00
* mw.js 还是 electron ?
* vue 还是 react ?
* localStorage 还是 sqlite ?
tuomasi
2019-01-17 13:44:24 +08:00
antd 虽然犯过错 但是 react 确实是屠龙刀 antd 还是值得一用的 >>>>>>>>偏右君 你还安好?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/500728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX