首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >尤雨溪再喷 React,这波我要反驳一下

尤雨溪再喷 React,这波我要反驳一下

作者头像
用户6901603
发布于 2024-01-07 06:32:51
发布于 2024-01-07 06:32:51
71300
代码可运行
举报
文章被收录于专栏:不知非攻不知非攻
运行总次数:0
代码可运行

这两天几个群都在传尤大喷 React 文档的截图,并且引起了热烈的讨论。然后就有人在问,是不是 React 真的那么坑

作为一个 React 深度使用者,觉得不应该让新学 React 的朋友留下这样一个刻板印象,所以我结合自身对于 React 的使用体验,反驳一下他的观点。

看一下尤大是怎么喷的。先是有个人发文吹了一波 React 新官网写得很用心。

然后尤大不知道为什么怨念会这么深,就说 React 挖下了许多艰深复杂的坑,用了夸张的手法来特意强调了这些坑的严重性。甚至用了 PUA 这样的词来刻意强调自己的观点

然后又说:React 最成功的地方在于塑造了一种几近于 cult 的凝聚力...

好巧不巧,我刚好认识这个单词...

cult:邪教

如果我说尤大有点上头、激进、极端,这应该不算是夸张的评价吧?我记得他以前说国内喷子多,技术氛围没有国外好,他这是在干嘛?说 React 用户是邪教、是被 PUA,这不算喷人吗?

1

截图中的案例

首先跟大家明确一下,截图中的案例,完全不是 React 的坑点。而应该算是 React 的优点之一。

因为当 React 中的状态发生变化时,会导致组件函数重新执行。因此,当我们需要一个计算属性时,不用做特别的处理和定义,正常使用即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function Form() {
  const [firstName, setFirstName] = useState('Taylor');
  const [lastName, setLastName] = useState('Swift');
  // ✅ Good: calculated during rendering
  const fullName = firstName + ' ' + lastName;
  // ...
}

例如使用 useEffect 去监听 state,这是冗余的操作。然后给出了错误示范。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function Form() {
  const [firstName, setFirstName] = useState('Taylor');
  const [lastName, setLastName] = useState('Swift');

  // 🔴 Avoid: redundant state and unnecessary Effect
  const [fullName, setFullName] = useState('');
  useEffect(() => {
    setFullName(firstName + ' ' + lastName);
  }, [firstName, lastName]);
  // ...
}

所以这里只是列举出来部分使用者的错误示范而已,压根算不上是一个坑点。如果这也算坑点,我可以在别的框架使用者的代码里找到一大堆错误示范,相互攻击就完事了,对不?

2

React 弱侵入性

React 始终保持了对 JavaScript 的弱侵入性。我认为这是一个非常大的优点。也就是说,当你使用 React 开发时,实际上用到的语法相对比较少,就算是你学习 React 也不会接触到太多的官方 API

弱侵入性带来的一个巨大的好处是,我们在开发时可以顺利植入我自己的开发理念。比如,你觉得 React 没有做依赖收集,是不好的,那么你就可以写一个状态管理去做依赖收集。Mobx 就是做这个事情的。

又或者,你觉得 React 提供的全局状态管理不如你的心意,你就可以自己封装一个发布订阅,结合自定义 hook 也能方便的订阅每一个组件。

这样的自由度一定是会受到 React 深度使用者欢迎的。这也是 React 生态百花齐放的原因之一。不知道别人会怎么样,但是我觉得我作为开发者,我非常喜欢多种开发思想相互碰撞的氛围。

3

闭包陷阱?

有的人觉得闭包陷阱是一个坑。

实际上,这个所谓的闭包陷阱这个词,不应该与 React 绑定在一起。因为闭包本身就是 JS 自身的特性。就算没有 React,许多人也觉得闭包难以理解。而且作为前端开发,我觉得应该做的事情是去掌握闭包的机制和逻辑,而不是觉得闭包这个东西我理解不了,就认为它不好。

闭包的特性让 JS 的能力变得非常强大,甚至你很多时候也在不知不觉中利用闭包来达到你的目的。许多别的开发语言中,也引入了闭包的机制,说明闭包是经历过时间沉淀的方案。

如果一个知识点,理解起来比较困难,然后我们就给他戴上心智负担重的帽子,然后把他作为一个缺点去不断批评他,这算是正常的想法吗?

4

性能不好?

Vue 重依赖收集,轻/无 UI diff.

React 无依赖收集, 重 UI diff.

也就是说,当 Vue 的数据变得庞大和复杂,他依然会有不小的性能压力。因此 Vue 的性能优化策略应该是集中在如何简化数据结构上。而 React 的优化重点,在如何减轻 diff 压力上。

谁也不能否认,有人能合理利用 React 的机制,编写出来一套性能比 Vue 更好的项目。只是说,做到这个事情对于 React 新玩家来说,有点困难而已。

Vue 均衡性能更好,React 性能上限更高。既然各有优劣,他只是一个不同人群的取舍问题,但你绝对不能说,这是 React 艰深复杂的坑点。

5

新手友好?

尤大一直以框架对新手友好作为一个重要的判断标准来证明一个框架是否优秀。但是扪心自问,各位前端开发们,你们真的会一直认为一门技术对新手友好,就一定是更好的吗?

我们在群里实际上还有另外一个观点。

当你还是新人的时候,你希望你学的东西简单,能快速上手。但是当你学成之后,你又担心他太简单,会的人太多,自己毫无竞争力。

我猜测许多人的心态,会经历这样的变化。所以我遇到很多 Vue 开发者,在使用了几年 Vue 之后,也会有很强烈的想法学习一下 React

实际上,在我看来,当我们技术能力逐渐变得更强,我掌握的技术,能够支撑起更高的上限,这也是一门框架不可忽视的巨大优势。在两者之间取得一个平衡,我认为这一点上,React 比 Vue 要做的好。

我们不能因为对新手友好,就忽略了 React 上限更高这个事实。而且事实上,现在已经有同学认为, Vue3 的学习成本,已经高于 react hooks。

6

Vue3 的破坏性更新

尤大说,Vue3 的破坏性更新,是他们团队犯的错误。但真的是决策失误吗?

我看未必。因为你不得不承认,事实上,你单看 Vue2 你就知道,Vue3 的出现,更多的是被逼无奈

有两个重要因素导致了 Vue2 承担了巨大的压力。

一个因素是 TS 被广泛接纳。导致了 Vue2 不支持 TS 成为了一个无法被反驳的缺陷。即使是现在的 Vue3,也依然有人觉得它对 TS 的支持并没有做到尽善尽美。

另外一个就是 React hooks 的出现,让 Vue2 的差距被明显拉开。所以你才会看到新的 Vue 语法,从某种程度上,跟 React hooks 长得很相似。

这两个因素组合在一起,催生了 Vue3 长成现在的样子。

然而破坏性更新是有代价。现在依然有大量的团队无法成功把项目从 Vue2 升级到 Vue3,这才是极大的坑点。

6

最后

写这篇文章,无意去过度争论 Vue 和 React 到底谁更好,因为在实际场景中做技术选型,要考虑的因素还包括技术之外的东西,这些外因甚至比技术本身更加重要。比如,我一直想去的那个团队,用的是 React,这样的理由,更加能左右一个人的决定。

主要的目的是不希望被很多人认为,React 像尤大说的那样,真的有很多艰深复杂的坑,我不认同这样的说法。也不希望吹一下 React 就被当成邪教。我觉得好的东西,夸一下这是很正常的事情。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这波能反杀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
乾坤大挪移!React 也能 “用上” computed 属性
初次见到计算属性一词,是在 Vue 官方文档 《计算属性和侦听器》 一节中,文章中是这样描述计算属性的:
政采云前端团队
2019/12/19
2.6K0
关于 “ React 和 Vue 该用哪个” 我真的栓 Q
来源 | OSCHINA 社区 作者 | 京东云开发者-孙凯 原文链接:https://my.oschina.net/u/4090830/blog/5587296 一、前言:我全都要 面对当今前端界两座大山一样的主流框架,React 和 Vue,相信很多小伙伴都或多或少都产生过这样疑问,而这样的问题也往往很让人头疼和犹豫不决: 业务场景中是不是团队用什么我就用什么? 如果选择了其中一个使用,那为什么不用另一个? 这两个框架各有什么优点和无法解决的问题? 最新版本的 Vue3 已经出了一段时间了,我要不要做组
程序猿DD
2023/04/24
2.6K1
关于 “ React 和 Vue 该用哪个” 我真的栓 Q
Vue3 究竟好在哪里?(和 React Hook 的详细对比)
这几天 Vue 3.0 Beta 版本发布了,本以为是皆大欢喜的一件事情,但是论坛里还是看到了很多反对的声音。主流的反对论点大概有如下几点:
ssh_晨曦时梦见兮
2024/01/26
1.1K0
Vue3 究竟好在哪里?(和 React Hook 的详细对比)
尤雨溪推荐的拖拽插件,支持Vue2/Vue3
说到拖拽工具库,非大名鼎鼎的的 Sortablejs 莫属。它是前端领域比较知名的,且功能强大的工具。但我们直接使用Sortablejs的情况很少,一般都是使用基于它的封装工具。今天推荐的 VueDraggablePlus 亦是如此。
程序员老鱼
2023/12/11
9.5K0
尤雨溪推荐的拖拽插件,支持Vue2/Vue3
写给初中级前端的高级进阶指南(JS、TS、Vue、React、性能、学习规划)
我曾经一度很迷茫,在学了Vue、React的实战开发和应用以后,好像遇到了一些瓶颈,不知道该怎样继续深入下去。相信这也是很多一两年经验的前端工程师所遇到共同问题,这篇文章,笔者想结合自己的一些成长经历整理出一些路线,帮助各位初中级前端工程师少走一些弯路。
ssh_晨曦时梦见兮
2020/04/11
6.7K0
写给初中级前端的高级进阶指南(JS、TS、Vue、React、性能、学习规划)
怎样才能学好Vue,听听尤雨溪怎么说?
如果你想问前端最值得学习的框架是什么,我一定会毫不犹豫地告诉你是Vue。 无论你是技术小白还是前端工程师,Vue的重要性自不必多说。从首个Commit的提交到破茧重生的Vue3、Vite2,Vue凭借轻量级、简单易学等优势,不仅荣登GitHub Repo Top3,且获得了182k个Star,Fork 数也达到了 28.6k,备受前端从业者的青睐。 Vue虽然好用,但是90%的人在学习Vue的过程中都不可避免地会遇到以下问题: 1、网上的资料虽多,但是质量参差不齐; 2、遇到问题没人带,只能自己苦苦摸索;
AI科技大本营
2023/05/08
4670
怎样才能学好Vue,听听尤雨溪怎么说?
对比:React 还是 Vue
自己之前的开发栈一直是 Vue,对 Vue 的设计理念及底层实现原理算是颇有了解;随着公司技术迭代,近半年来开始接触&使用 React。
奋飛
2024/05/25
1.3K0
对比:React 还是 Vue
顺藤摸瓜,突然有点心疼尤雨溪,写vue3太难了
就在前天凌晨6点多,我在公众号上推送了一篇文 《尤雨溪:Vue3.0全球发布会在线视频》,没看过的戳标题回顾,真的建议有空多看几遍,重温下尤大帅气的脸庞,才是最重要的。
闰土大叔
2020/09/29
3.1K0
顺藤摸瓜,突然有点心疼尤雨溪,写vue3太难了
适合Vue用户的React教程,你值得拥有(二)
上周小编我写了 适合Vue用户的React教程,你值得拥有,得到了小伙伴们的一致好评,今天这篇文章是这一系列的第二篇文章。今年的9月18日是九一八事变89周年,同时在这一天,Vue3.0正式版发布了。相信很多小伙伴已经看过了Vue3.0相关的很多文章了。今天这篇文章将会对Vue2,Vue3,React的一些用法进行对比,方便小伙伴们学习。
前端进击者
2021/07/27
7170
【Hooks】:[译]不是魔法,仅仅是数组
我是 hooks api 的粉丝,但是,在使用 hooks 的时候,它会有一些奇怪的约束。如果你很难理解这些规则,不妨看看这篇文章。
WEBJ2EE
2021/02/26
7300
【Hooks】:[译]不是魔法,仅仅是数组
我们一起看了一场尤雨溪的直播,聊聊过程和感受
怎么说呢,我很享受这种氛围。和一群志同道合的朋友,看同一个东西,然后各自发表自己的意见和看法,这种感受与看直播发弹幕很不一样。
用户6901603
2022/04/11
7310
我们一起看了一场尤雨溪的直播,聊聊过程和感受
Vue 3.0 这个迷人的小妖精,到底好在哪里?(更新原理对比)
这几天 Vue 3.0 Beta 版本发布了,本以为是皆大欢喜的一件事情,但是论坛里还是看到了很多反对的声音。主流的反对论点大概有如下几点:
ssh_晨曦时梦见兮
2020/04/24
1.8K0
Vue 3.0 这个迷人的小妖精,到底好在哪里?(更新原理对比)
尤雨溪回答-为什么Vue在国际上越来越没影响力?
这种问题问得真是糟心,下面有些回答更糟心,最糟心的是我其实无视了这个问题很久,懒得回答,但知乎还 tmd 老推给我。
用户10106350
2022/10/28
5.3K0
体验concent依赖收集,赋予react更多想象空间
concent v2版本的发布了,在保留了和v1一模一样的api使用方式上,内置了依赖收集系统,支持同时从状态、计算结果和副作用3个维度收集依赖,建立其精确更新路径,当然也保留了v1的依赖标记特性,支持用户按需选择是让系统自动收集依赖还是人工管理依赖,大多数场景,推荐使用自动收集依赖,除非非常在意渲染期间自动收集和更新依赖的那一点微弱的额外计算以及非常清楚自己组件对状态的依赖关系,那么可以降级为人工标记依赖,当然了,如果是v1版本,那就没得选了,只能是人工标记了。
腾讯新闻前端团队
2020/03/20
8630
体验concent依赖收集,赋予react更多想象空间
问了尤雨溪25个问题后,我的很多想法开始变了
5 月 9 日,我在视频号“来广营小盖”连麦了尤雨溪,和他聊了聊 Vue、Vite,以及前端工程师的成长等话题。在这之前,我为了更加全面了解尤大,也看了他所有的知乎回答,并且整理了一篇精华内容,同样放出来供你参考。 下面是连麦内容的文字版本,希望对你有所帮助。 另外,欢迎关注视频号“来广营小盖”,6 月,我会连麦周爱民(前端大神)、乔新亮(前苏宁技术 VP,年薪千万)、万俊峰(go-zero 作者,好未来资深专家)、左耳朵耗子等人,为你交付知识服务,和你一起共同成长。 关于 Vite、Flutter 和低代
深度学习与Python
2023/04/01
9610
问了尤雨溪25个问题后,我的很多想法开始变了
vue v-model 双向绑定
v-model 双向绑定,用于处理表单输入绑定,类似于 react 中的受控组件。
jgrass
2024/12/25
2150
vue v-model 双向绑定
React和Vue技术栈融合使用?这个工具太牛逼了!
或者有没有遇到从Vue项目迁移到React项目,或者从React项目迁移到Vue项目的需求呢?
程序员老鱼
2023/09/07
3.8K0
React和Vue技术栈融合使用?这个工具太牛逼了!
理解 React Hooks
Sophie Alpert 和 Dan Abramov 在 React Conf 2018 中 提出了 hooks 这个概念,让我们一起来看看 Hooks 在解决一个什么问题。
志航
2018/11/04
5.5K0
理解 React Hooks
尤雨溪主题演讲《2022 前端生态趋势》全记录
在过去几年中,发生的最大的一个开发范式层面的一个变化肯定是 React Hooks,React Hooks 推出可以说是启发了很多组件逻辑表达和逻辑附用的新范式。
清秋
2022/09/20
1.2K0
尤雨溪主题演讲《2022 前端生态趋势》全记录
Hooks 邂逅 MobX ,代码变得更丝滑了!
React 16.8 正式推出 Hooks 至今已经两年多了,有些朋友却一直觉得这是个新技术,对上手使用 Hooks 仍然处于观望状态,即使大多数使用React 技术栈的公司,他们所开发的项目也是多数采用React.Component的形式。
viktor
2022/09/19
1.5K0
Hooks 邂逅 MobX ,代码变得更丝滑了!
推荐阅读
相关推荐
乾坤大挪移!React 也能 “用上” computed 属性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档