iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >useEffect理解React、Vue设计理念的不同
  • 145
分享到

useEffect理解React、Vue设计理念的不同

2024-04-02 19:04:59 145人浏览 八月长安
摘要

目录引言Vue与React的差异useEffect会越来越复杂总结引言 我们知道,React发布Hooks后,带来了业界一波Hooks热。很多框架(比如Vue Composition

引言

我们知道,React发布Hooks后,带来了业界一波Hooks热。很多框架(比如Vue Composition apiSolid.js)都借鉴了Hooks的模式。

但是,即使这些框架都借鉴了Hooks,但由于框架作者的理念不同,发展方向也逐渐不同。

比如,在Vue Composition API中,对标React useEffect API的是watchEffect,在Vue文档中,有一小段内容介绍他的用法:

而在React beta文档中,介绍useEffect的,则有整整6节内容:

为什么会有这样的区别?让我们从useEffect看看ReactVue设计理念的不同。

Vue与React的差异

Hooks刚问世时,他被看作是类组件的替代方案。文档中介绍Hooks时也是将他与类组件对比。

其中useEffect的执行时机囊括了如下3个生命周期函数:

componentDidMount

componentDidUpdate

componentWillUnmount

反观借鉴了HooksVue Composition API,则同时提供了watchEffect API与不同场景的生命周期函数。

这里已经体现出两者设计理念的不同了:

React作为Facebook为探索UI开发最佳实践而生的框架,一贯的做法是 —— 保持API稳定(比如this.setStateReact诞生伊始就一直存在)。

Vue则借鉴了各种框架中的最佳实践(比如虚拟DOM、响应式更新...)。

所以,从易用性上来说,Vue Composition API是一定优于React Hooks的,比如:

Hooks不能在条件语句中声明

Hooks必须显式指明依赖

并且,这种易用性的差异会随着框架迭代,愈发明显。

useEffect会越来越复杂

本着保持API稳定的原则,当前useEffect主要与上述三个生命周期函数相关。

但是,未来会有更多触发时机与useEffect挂钩。

所以,React团队在努力做一件事 —— 淡化useEffect与生命周期的关系,甚至淡化useEffect与组件的关系(因为当谈到组件时,很自然的会想到组件生命周期)。

怎么淡化呢?答案是 —— 在严格模式下,DEV环境会触发多次useEffect回调。

如果你将useEffect当作componentDidMount/WillUnmount来用,这个特性很可能让你的代码出bug

React团队之所以这么做,就是想教育开发者 —— useEffect和生命周期没有关系。开发者应该将useEffect看作针对某个数据源的同步过程

比如,下述聊天室组件,其中的useEffect可以看作是针对聊天室连接的同步过程

const serverUrl = 'https://localhost:1234';
function ChatRoom({ roomId }) {
  useEffect(() => {
    const connection = createConnection(serverUrl, roomId);
    connection.connect();
    return () => {
      connection.disconnect();
    };
  }, [roomId]);
  // ...
}

当聊天室组件mountupdateunmount时,对应的同步过程应该进行。

roomId变化时,对应的同步过程应该进行。

同理,如果React原生支持了Vue中的KeepAlive,那么当聊天室组件从可见变为不可见,以及从不可见变为可见状态,同步过程都应该进行。

所以,当我们从同步过程应该何时进行的角度看待useEffect时,上述useEffect触发时机都是合理的。

但是,如果从生命周期函数的角度看待useEffect,等未来(可能是v18的某个版本),Offscreen Component特性落地(对标Vue中的KeepAlive),组件从可见变为不可见状态时,useEffect销毁函数useEffect回调函数会依次执行,就会让人很头大。

这就是为什么,我上文说,React团队一直在淡化useEffect与生命周期的关系,甚至淡化useEffect与组件的关系。

一切都是为了未来其他特性与useEffect的挂钩打下理论基础。而这些特性从组件生命周期函数的角度讲不通。

这也是为什么在新文档里有6节内容与useEffect相关的原因。

作为对比,Vue在遇到新的场景时会怎么做呢?显然是设计新的API

总结

到底是提供一个API,但是能覆盖更多场景(文档有6节来介绍他)好,还是每个场景都提供一个API好?

不同开发者有自己的答案。

但有一点很明确,对于前端新手,React的上手难度会越来越高,而Vue的上手难度会尽可能保持平滑。

这里的前端新手,可能是想入行前端的新人,也可能是觉得前端我也能干后端

所以,对于当前的从业者来说,这究竟是好事还是坏事呢?

以上就是useEffect理解React、Vue设计理念的不同的详细内容,更多关于useEffect React Vue设计理念的资料请关注编程网其它相关文章!

--结束END--

本文标题: useEffect理解React、Vue设计理念的不同

本文链接: https://www.lsjlt.com/news/167995.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • useEffect理解React、Vue设计理念的不同
    目录引言Vue与React的差异useEffect会越来越复杂总结引言 我们知道,React发布Hooks后,带来了业界一波Hooks热。很多框架(比如Vue Composition...
    99+
    2024-04-02
  • React useEffect的理解与使用
    目录避免重复循环渲染 关于副作用的清除 React16.8新增的useEffec这个hook函数就是处理副作用的。 所谓的“副作用”,举个通俗一点的例子,假如感冒了本来吃点药就没事了...
    99+
    2024-04-02
  • React Hooks之usePolymerAction抽象代码结构设计理念
    目录背景设计理念抽象代码结构声明与定义用法高级用法拆分/合并actionAPIuseSetStategetActionpolymerActionusePolymerActionSta...
    99+
    2024-04-02
  • Golang 语言的设计理念与特性解析
    Golang 语言的设计理念与特性解析 Go语言(也称为Golang)是由谷歌公司开发的一种静态强类型的编程语言,于2009年首次亮相。自问世以来,Go语言在各个领域逐渐崭露头角,广受...
    99+
    2024-03-07
    golang 特性 设计理念 go语言 垃圾回收器 标准库
  • 通过示例讲解Remix 设计哲学理念
    目录Remix 中的丰富经验遵循 web 客观发展遵循 S/C 模型遵循 Web 标准渐进式不做过度抽象小结Remix 中的丰富经验 Remix 版本: v1.14.1 Remix...
    99+
    2023-03-24
    Remix 设计哲学理念 Remix 设计理念
  • Go语言为何不支持方法重载的设计理念
    go 语言不支持方法重载,因为其设计理念强调简单性、并发性和类型安全性。方法重载会引入名称冲突、复杂的类型系统和代码混淆。为了弥补这一点,go 语言提供了函数,允许在同一个包中创建具有相...
    99+
    2024-04-04
    方法重载 设计理念 go语言
  • SpringMVC设计理念与DispatcherServlet的示例分析
    这篇文章主要介绍SpringMVC设计理念与DispatcherServlet的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SpringMVC简介SpringMVC作为Struts2之后异军突起的一个表现层...
    99+
    2023-06-02
  • Go语言error的设计理念及背景演化详解
    目录背景各语言中 Error 的演化C语言C++Go 中 Error 的理念1. 区分 Error 和 Exception2.Error是一个接口总结背景 作为一门相对新兴的语言,G...
    99+
    2022-12-08
    Go error设计理念 Go error背景演化
  • Go语言包组织的设计理念探究
    Go语言包组织的设计理念探究 Go语言一直以其简洁、高效而受到开发者们的喜爱,其中包组织的设计理念也是值得探究的一部分。在Go语言中,包是代码的组织单元,它可以让开发者将相关功能的代码...
    99+
    2024-04-02
  • jQuery的运行机制和设计理念分析
    其短小精悍,使用简单方便,性能高效,能极大地提高开发效率,是开发Web应用的最佳的辅助工具之一。因此大部分开发者在抛弃Prototype而选择jQuery来进行Web开发。 一些开发...
    99+
    2022-11-21
    运行机制 设计理念
  • 聊聊Golang对容错机制的设计理念
    随着IT技术的快速发展,各种编程语言层出不穷,随之而来的问题也愈加复杂。在这样的背景下,出现了一种新兴的编程语言,那就是Golang。Golang是Google在2009年发布的一种开源编程语言,它主要关注于网络编程、分布式系统和并发编程等...
    99+
    2023-05-14
  • 网页设计的颜色搭配理念是什么
    今天给大家介绍一下网页设计的颜色搭配理念是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。(一)网页配色基本概念(1)白纸黑字是永远的主题,谁都说不出不好来...
    99+
    2023-06-08
  • VUE 模板语法背后的设计理念,带你领略前端开发的艺术
    VUE模板语法的设计理念 VUE模板语法是基于HTML的扩展,它通过在HTML中添加特殊的指令来实现动态和交互式的内容。VUE模板语法的一个关键设计理念是将模板与逻辑代码分开。这使得模板更容易编写和维护,也使代码更易于理解和重用。 VU...
    99+
    2024-02-10
    VUE 模板语法 设计理念 前端开发
  • 关于React中setState同步或异步问题的理解
    目录1. setState同步?异步? 2. 表现为异步 1. React 合成事件 2. 生命周期函数 3. 表现为同步 1. 原生事件 2. setTimeout 4. setS...
    99+
    2024-04-02
  • Vue + TypeScript:理解其协同作用的关键
    Vue 和 TypeScript 的协同作用 Vue 是一个流行的 JavaScript 框架,用于构建交互式单页面应用程序 (SPA)。它以响应式系统、组件化架构和易于学习的特性而闻名。 TypeScript 是一个 JavaScri...
    99+
    2024-03-08
    Vue、TypeScript、单页面应用程序、类型检查、响应式
  • vue设置代理不起作用问题及解决
    目录vue设置代理不起作用运行后发现报错404vue配置代理方式正向代理配置环境变量配置文件目录vue设置代理不起作用 使用vue写前端界面时,需调用后端接口展现查询的数据,于是设置...
    99+
    2024-04-02
  • 如何理解JavaScript的设计模式
    本篇文章为大家展示了如何理解JavaScript的设计模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  今天我们就聊一下这三个设计模式  单例模式 / 组合模...
    99+
    2024-04-02
  • 如何理解C++的设计原则
    今天就跟大家聊聊有关如何理解C++的设计原则,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++的设计原则就是:学习C++而言,可以认为他是一门独立的语言,他并非依赖C语言,我们可以...
    99+
    2023-06-17
  • PHP 设计模式的深入理解
    设计模式是可重复使用的软件设计解决方案,用于解决常见问题,提高代码可维护性、可扩展性和可重用性。php 中常见的设计模式包括:单例模式:确保一个类只创建一次实例。工厂模式:根据输入创建对...
    99+
    2024-05-06
    php 设计模式
  • Go语言的设计理念与集合操作的冲突在哪里?
    Go语言的设计理念与集合操作的冲突在哪里? Go语言作为一门现代化的编程语言,具有简洁、高效、并发性良好等特点,深受程序员喜爱。然而,在进行集合操作时,有时会发现Go语言的设计理念与一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作