写 React 的学了一下 Vue,真香

2020-05-12 06:57:50 +08:00
 lihongming

最近接手一个项目,由于以前是用 Vue 写的,只好临时学了一下,结果发现……

我艹,这玩意比 React 好用太多了。

很多 React 里处理起来比较麻烦的问题,在 Vue 里都解决了。向 children 传参再也不用 Clone 了,Vuex 也比 Redux 好使,连路由参数都能直接传入 props……

其实 React 的那些麻烦已经很多年了,只是老外似乎不太注重用户体验,不愿解决。还是中国同胞好啊!

20105 次点击
所在节点    Vue.js
140 条回复
pingfan
2020-05-12 20:05:29 +08:00
@lihongming alipay hk 大量招前端,楼主要不要考虑
xcatliu
2020-05-12 20:10:43 +08:00
React 中向 children 传参可以不用 Clone:
```js
<children.type {...children.props} extraProp="Hello" />
```
xcatliu
2020-05-12 20:11:22 +08:00
hurrytospring
2020-05-12 20:48:12 +08:00
写了很多年 vue,一写 react 发现这东西真是神器,概念抽得一层一层的,各种花式的写法,插件,工具,能吹逼的地方太多了。。不像 vue,面试也没太多可以讲的。
lambdaxs
2020-05-12 20:59:14 +08:00
@no1xsyzy 好久没写 react 了,刚看了下 hooks,用法是蛮恶心的,背后的想法应该是为了处理副作用,函数式的一厢情愿就是把世界想的太美好了,而现实却充满副作用(手动狗头
hantsy
2020-05-12 21:28:03 +08:00
@namelosw >>> Ng 用没 React 和 Vue 人多是有原因的。
这个只是国内的情况吧,世界范围用 Angular,React 的比例是不相上下的,自己可以看 Google 分析结果。国内对于大多数人来讲,使用 Angular,还要学习 TS 语言,Rxjs 等, 成本在那里,不懂 DI 还要了解 DI 。当然没有用 JS 来得直接,和写早期的 PHP 感觉一样,什么样的烂程序都可以跑。国内很多程序员,简单粗暴的东西用习惯了,比如 Mybatis 吧,放到世界范围看一下,有几个人在用? 国内招人的时候还不是标配。

很多时候我是不完全写前端的代码,实在没碰到你说的这么多的问题,也没看 Angular 与 React 有那么差别。对于 Angular 和 React 两都我没有仔细研究过他们的原理,不大明白 VirtualDOM 和 ShadowDOM 的区别。从使用上讲,感觉 Angular 和 React 概念上可以互补,也有第三方项目,将 Angular DI 引入 React,Ionic 下也项目把 JSX 引入 Angular Component 中。

之前项目,我们按照 React 中 Container/Presenter pattern 细分一个页面来写 Angular Components,感觉也 Angular 和 React 代码和概念上都很接近,更新按树型结构一个从上到下方向形成环流,感觉 Changes Detection 效率是差不多的。我实在不清楚你的无限刷是怎么弄出来的。

开始很长一段时间我不怎么关注 react, 只是因为早期的 Reactjs 只能用 es5, 对于我来讲写 es5 太难了。直到出现 es6,react 开始支持 Compoent class,我才感觉有点吸引力。现在感觉 Reactjs 可能只在测试工具方面更胜一筹,jest, testing-library,cypress 比 Angular 官方推崇的 Karma/Jasmine/Protractor 要舒服一些。
beyondex
2020-05-12 21:31:21 +08:00
所以说,angular 在 3 年后等你们
longjiahui
2020-05-12 22:36:28 +08:00
哈哈哈哈哈哈, 我看 vue3.0 去了
namelosw
2020-05-12 22:36:35 +08:00
@hantsy > 很多时候我是不完全写前端的代码,实在没碰到你说的这么多的问题,也没看 Angular 与 React 有那么差别。
React 最大的区别是参数可以传递组件,然后在消费这个组件里面直接用 JSX 直接使用这个组件,在不添加新的 API 的情况下就可以用语言本身实现 Higher order component,render callback 之类的模式,大部分的抽象都可以用编程语言本身机制实现,而不需要某些特别的 API 。比如最常见的自造路由,或者外框固定,内部是动态组件,还要用外部的数据,或者渲临时染外面给内部的动态组件都非常简单。Angular 的解决这些东西的 API 很复杂,而且互相重叠,有时候还 cover 不了,ng-template,ng-container,ng-content 满天飞。

> 我实在不清楚你的无限刷是怎么弄出来的。
无限刷比如你绑定一堆 getter 就会经常无限刷了,前端一般都有大量的衍生数据,所以这些读模型怎么从写模型同步是前端的一个非常基本的问题。getter 是最直接的方式。React 的一般用 Selector 解决这个问题。Vue 和 Mobx 的机制可以精确全自动更新 getter 。Angular 只能更新完手动赋值,或者 Rx subscribe,都不是特别好用,一般需要 Ng*x 解决。

> 国内很多程序员,简单粗暴的东西用习惯了,比如 Mybatis 吧,放到世界范围看一下,有几个人在用? 国内招人的时候还不是标配。
对我来说 React 跟 Angular 比并不是 Mybatis 和 Spring 的关系,而是 Akka + Scala 和 Spring 的关系。React 模式还是要先进一代。Angular 只是克服了大部分缺点的 AngularJS 。
no1xsyzy
2020-05-12 22:40:19 +08:00
@namelosw #98 这不是叫数据驱动么…… source 和 sink 是信号处理相关的术语,所以应该叫信号驱动?
广义函数式…… 一说这是做函数式的很多人所不齿的,虽然我也不知道前端对这块看法是啥,好像 “弱纯性” 还算通融?

CycleJS 我记住了
namelosw
2020-05-12 23:29:10 +08:00
@no1xsyzy 一般来说数据驱动指 D3 那种,逻辑可以用数据结构表示。

函数式是一个大筐,啥都能往里放,有人 map filter 这些 HOC 就算。我觉得函数式的核心是一等函数+ADT,写好 ADT 和对应函数基本就能享受函数式组织逻辑的好处了,其他的部分都和平台和需求相关性太大(响应式,并发等等)。

Source,Sink 应该是响应式,特别是流式处理常用的概念吧。虽然这个是从信号处理来的。前端比如 Cycle 会用这个 term,后端 Akka,Kafka,Spark 这些基本都会用。

我还真没看到不齿的现象,我理解一般 stream 可以建模成 monad,如果 stream 是惰性的,那么对 stream 的 map / filter / flatMap 都算 pure operation 。就算不是 pure 的,这套类 monad 的 API 也是非常函数式的,因为它分离了作用(stream)和数据操作(传进去的 callback),这样你的数据操作既可以在 stream 里用,也可以在 list 或者 maybe 之类里用。

追求纯的人是很多,但是现在恶意打击不纯的感觉已经很少了。
gouflv
2020-05-13 00:15:30 +08:00
就凭楼主还用 redux vuex 这些,就说明水平一般,没啥好讨论的了
AV1
2020-05-13 01:49:18 +08:00
早期很不喜欢 react 的 class 语法,感觉 class 写法特别啰嗦,而且 API 名称又臭又长(如 componentWillMount 、componentWillUnmount )。现在有了 hooks 之后,感觉清爽好用多了。
yanguango
2020-05-13 02:06:41 +08:00
很不喜欢 Vue 或者 Angular 所谓的 ‘directive’, 存存的 JS 不好吗,为啥要搞什么 directive
jakezh
2020-05-13 04:25:37 +08:00
我们都是 vue 迅速出 mock up
拿到项目后再 react 实现
wework
2020-05-13 06:51:17 +08:00
web 开发来说,php+mysql 目前还是很稳的
murmur
2020-05-13 08:01:21 +08:00
@yanguango js 工程师和前端工程师的思路是不一样的,在没框架的年代,就开始各种 data-xxx 在元素上挂东西了(这其实也是避开闭包坑的一种途径),现在有官方 directive 了,用就是

为什么要搞 directive,你应该问问 react,明明 html 里用的 class,他为啥给写成 className,你长得像 html/xml,写的是 js,到底是个什么东西
wangxiaoaer
2020-05-13 08:23:46 +08:00
@gouflv #112 你好, 请问高手应该用什么呢?
fescover
2020-05-13 08:38:28 +08:00
又来了…
这么说吧,Vue 面试就是问双向绑定原理,React 面试就是问 hooks 实现原理,实际工作中都是写 js,开发效率没什么区别,遇到什么坑加群问人都能快速解决。
Hanggi
2020-05-13 08:47:02 +08:00
@bnm965321 请不要这么说话不负责任,react hook 不需要学是嘛,什么时候用 useState, 什么时候用 useMem,useEffect 怎么用,useCallback 有啥区别? draft 是啥,reducer 是啥?这些不看就能懂?

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

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

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

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

© 2021 V2EX