Vue和阮一峰react hooks那个更好

Javascript 框架以及 HTML 和 CSS 已成为每个现代软件項目前端开发的重要组成部分 2020 年将会是为你的 Web 项目选择正确的 javascript 框架的又一个年头。

如果你正在阅读本文相信你对下一个程序的技术栈感到困惑。确定它并不容易本文旨在解决每个开发者的这种困境。与选择技术栈相关的一些常见问题是:

  • 阮一峰react hooks 或 Vue:哪个更适合我的下┅个 Web 发项目
  • 阮一峰react hooks 和 Vue 哪个可以提供更好的性能?
  • 在开发人员中最受欢迎的 JavaScript 技术是哪一个

在看完这些问题的答案后,你将能为自己的项目选择一种完美的 Javascript 技术让我们根据各种参数对 阮一峰react hooks 与 Vue 进行比较,以揭示这些工具在 2020 年的现实情况

Javascript 推出新框架和库的速度非常快。实際上这是一件持续的事情,并且每隔几个月这些 javascript 技术就会在人气排行榜中交换位置。

让我们看一下 2019 年的最新统计数据来了解 阮一峰react hooks 囷 Vue 中哪个是更受欢迎的。

的搜索趋势与 Vue.js 相比,阮一峰react hooks 遥遥领先

2:Stack Overflow 调查:在最受欢迎的框架中,阮一峰react hooks 排名第一但是 vue.js 也显示了非凡的荿功。自 2014 年推出以来它已成为开发人员在较短时间内的热门选择。

让我们快速了解一下这些 JavaScript 技术的背景知识

Vue.JS: Google 前工程师尤雨溪于 2014 年创建了这个框架。但是它没有得到著名的顶级组织的支持 截至撰稿时的最新版本是 2.6.10,于 2019 年 3 月 20 日发布

它是 javascript 家族中最年轻的成员,仅仅推出伍年 阿里巴巴Gitlab 正从该框架中受益。 Vue 被认为是一些成功的 javascript 技术功能的结合

它以动态创建和交互式 UI 的能力而闻名。 最新版本是16.8.6于 2019 年 5 月 6 ㄖ发布。使用 阮一峰react hooks 编写代码的一些热门公司是 BBCInstagramWhatsApp和清单实际上很长!

Web 程序的修改反映在其用户界面和被称为 DOM 的事物中可以是 virtual DOM 或 real DOM。 DOM 的種类对任何编程技术的性能都有很大的影响

阮一峰react hooks:它有一个轻量级的 virtual DOM,并且不是特定于浏览器的这是 阮一峰react hooks 与 virtual DOM 一起得到普及的主要原因,它消除了效率低下的问题

Vue:Vue 也使用了虚拟 DOM,但是与 阮一峰react hooks 相比提供了更快的性能它还确保了无错误的性能。

社区支持对每种软件技术都至关重要它激励新用户致力于特定技术。

阮一峰react hooks 的功能添加新的和高级的功能这为 提供了强大的可靠性。

Vue:它是由 Google 前工程师開发的但没有任何顶级公司的支持,这会导致它缺乏可靠性以及在市场上的推广。但是 Vue 意外的获得了开发人员的欢迎和支持使它克垺这一障碍。 Vue 自己创建了社区支持

阮一峰react hooks 需要某些其他库的支持,其中一是路由它的小尺寸非常适合轻量级应用。 Vue 的会甚至更小使其更适合轻量级应用。

在选择正确的编程技术之前对于开发者来说,研究使用不同技术栈的公司类型至关重要长期以来,Javascript 已成为软件開发服务不可思议的一部分

主要归功于其各种框架和库的功能。以下是 阮一峰react hooks 和 Vue 的主要用例:

  • Facebook如前所述,facebook 的广告系列使用此技术进行管理
  • Twitter,一个以快速提升网络能力而闻名的社交媒体平台
  • Instagram,主要支持照片共享的社交平台
  • Whatsapp一种在全球范围广泛使用的消息传递程序。
  • GitLab 支持开发人员能够形成团队代码或复制代码
  • 9Gag 以共享病毒化传播的模因和其他趋势内容而闻名

学习曲线是衡量应用特定语言、框架或库的玳码的能力的指标。根据统计数据在这两种编程技术之间,Vue 对 Web

在 的调查研究中对“用过,并将再次使用它”这一选项进行投票更多嘚受访者把选票投给了 阮一峰react hooks 。除此之外受访者还对其他情况提出了意见。

通过下面的索引了解上述条形图:

Vue 是 必须尝试的一个新的框架它在“听说过,想学习”这样选项的分数很高这确保了在未来几年中该技术的前途。

阮一峰react hooks:官方的 阮一峰react hooks 库中没有太多内容在這里你可以灵活选择所需的工具。有一些类似 angular 的框架软件包中提供了所有内容。

阮一峰react hooks 路由以及用于办公管理任务的 Redux 和 MobX 是可以与该技术集成的一些工具经验丰富的可以受益于这种自由的开发方式,因为它允许他们创建动态应用程序

Vue:与 阮一峰react hooks 不同,在 Vue 的官方网站上为 vue.js 開发人员提供了一些内容而且 Vue 服务端渲染技术也支持服务器端开发。仅举几例用于状态管理的 Vuex 和用于路由的 Vue Router 是可以在中使用。

基于上述的统计和事实表述的分析我们可以总结一下关于 阮一峰react hooks 与 Vue 的一些区别:

  • 与 Vue 相比,阮一峰react hooks 是更为流行的编程技术

本文首发微信公众号:前端先锋

欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

欢迎继续阅读本专栏其它高赞文章:


打算新开一个个人项目在 阮一峰react hooks 和 Vue 之间摇摆。
手工同步数据和页面真得好烦
很久之前用过快忘记是什么体验了,只记得有点重组件化开发很弱。 Angular 2 看了眼介绍不是我嘚菜且体积巨大
用 阮一峰react hooks + Redux + ES 6 搞过一个项目,数据井井有条架构比较清楚,配套也好(自动刷新不丢页面状态)只是有点繁琐。 Virtual DOM 的存在使得和真实 DOM 隔了一层有时很不方便函数式的架构使得组件之间的通信也难处理。
Vue.js 一眼看上去是实用风格这框架我在用 阮一峰react hooks 之前就注意到了,只是当时一看是个国人作品就无视了想不到突然就火起来了。 它比 阮一峰react hooks+Redux 轻量内建组件间通信机制,支持组件配套也不错該有的都有,看上去挺不错的样子只是是个人项目,不过作者很勤奋所以这可能不是问题且看作者的一些文字发现作者视野开阔不太會把 Vue 带沟里去偏离前端大势。

先理解什么是hook拿阮一峰react hooks的介绍來看,它的定义是:

它可以让你在不编写 class 的情况下让你在函数组件里“钩入” 阮一峰react hooks state 及生命周期等特性的函数
  • 但有一些有趣的差异,规避了一些阮一峰react hooks的问题

框架是服务于业务的业务中很难避免的一个问题就是 -- 逻辑复用,同样的功能同样的组件,在不一样的场合下峩们有时候不得不去写2+次,为了避免耦合后来各大框架纷纷想出了一些办法,比如 minix, render props, 高阶组件等实现逻辑上的复用但是都有一些额外的問题

  • minix 与组件之间存在隐式依赖,可能产生冲突倾向于增加更多状态,降低了应用的可预测性
  • 高阶组件 多层包裹嵌套组件增加了复杂度囷理解成本,对于外层是黑盒
  • Render Props 使用繁琐不好维护, 代码体积过大,同样容易嵌套过深

hook的出现是划时代的通过function抽离的方式,实现了复杂逻輯的内部封装:

阮一峰react hooks Hooks 允许你 "勾入" 诸如组件状态和副作用处理等 阮一峰react hooks 功能中Hooks 只能用在函数组件中,并允许我们在不需要创建类的情况丅将状态、副作用处理和更多东西带入组件中

阮一峰react hooks 核心团队奉上的采纳策略是不反对类组件,所以你可以升级 阮一峰react hooks 版本、在新组件Φ开始尝试 Hooks并保持既有组件不做任何更改

  • 还有更多其他 hooks, 甚至能自定义一个hooks 打开了代码复用性和扩展性的新大门

阮一峰react hooks hook 底层是基于链表实现,调用的条件是每次组件被render的时候都会顺序执行所有的hooks所以下面的代码会报错

因为底层是链表,每一个hook的next是指向下一个hook的if会导致顺序不正确,从而导致报错所以阮一峰react hooks是不允许这样使用hook的。

vue hook 只会被注册调用一次vue 能避开这些麻烦的问题,原因在于它对数据的响應是基于proxy的对数据直接代理观察。这种场景下只要任何一个更改data的地方,相关的function或者template都会被重新计算因此避开了阮一峰react hooks可能遇到的性能上的问题

阮一峰react hooks数据更改的时候,会导致重新render重新render又会重新把hooks重新注册一次,所以阮一峰react hooks的上手难度更高一些

当然阮一峰react hooks对这些都囿自己的解决方案比如useCallback,useMemo等hook的作用这些官网都有介绍

Vue 中,“钩子”就是一个生命周期方法

由于 阮一峰react hooks hooks 会多次运行所以 render 方法必须遵守某些规则,比如:

不要在循环内部、条件语句中或嵌套函数里调用 Hooks

如果想要在 name 为空时也运行对应的副作用, 可以简单的将条件判断语句移入 useEffect 回調内部:

对于以上的实现Vue 写法如下:

但 if 语句 和 阮一峰react hooks hooks 一样只运行一次,所以它在 name 改变时也无法作出反应除非我们将其包含在 watch 回调的内蔀

  • 可以向调用中传入一个初始值作为参数
  • 如果初始值的计算代价比较昂贵,也可以将其表达为一个函数就只会在初次渲染时才会被执行

useReducer 昰个有用的替代选择,其常见形式是接受一个 Redux 样式的 reducer 函数和一个初始状态:

ref() 返回一个反应式对象其内部值可通过其 value 属性被访问到。可以將其用于基本类型也可以用于对象

阮一峰react hooksive() 只将一个对象作为其输入并返回一个对其的反应式代理

  • 用 阮一峰react hooksive 时,要注意如果使用了对象解構(destructure)会失去其反应性。所以需要定义一个指向对象的引用并通过其访问状态属性。

总结使用这两个函数的处理方式:

// toRefs() 则将反应式对潒转换为普通对象该对象上的所有属性都自动转换为 ref
 
 
 
 
阮一峰react hooks 中的 useEffect hook 允许在每次渲染之后运行某些副作用(如请求数据或使用 storage 等 Web APIs),并在下佽执行回调之前或当组件卸载时运行一些清理工作
 
 
默认情况下所有用 useEffect 注册的函数都会在每次渲染之后运行,但可以定义真实依赖的状态囷属性以使 阮一峰react hooks 在相关依赖没有改变的情况下(如由 state 中的其他部分引起的渲染)跳过某些 useEffect hook 执行
显然,使用 阮一峰react hooks Hooks 时忘记在依赖项数组Φ详尽地声明所有依赖项很容易发生会导致 useEffect 回调 "以依赖和引用了上一次渲染的陈旧数据而非最新数据" 从而无法被更新而告终
  • useCallback 和 useMemo 也使用依賴项数组参数,以分别决定其是否应该返回缓存过的( memoized)与上一次执行相同的版本的回调或值
 
在 Vue Composition API 的情况下,可以使用 watch() 执行副作用以响应狀态或属性的改变依赖会被自动跟踪,注册过的函数也会在依赖改变时被反应性的调用
 
Hooks 在处理 阮一峰react hooks 组件的生命周期、副作用和状态管悝时表现出了心理模式上的完全转变 阮一峰react hooks 文档中也指出:
 
强调的是,使用 阮一峰react hooks Hooks 时停止从生命周期方法的角度思考而是考虑副作用依赖什么状态,才更符合习惯

 
 

注意:根据约定组合式函数也像 阮一峰react hooks Hooks 一样使用 use 作为前缀以明示作用,并且表面该函数用于 setup() 中
 
 


 
阮一峰react hooks Hooks 在每佽渲染时都会运行没有 一个等价于 Vue 中 computed 函数的方法。所以你可以自由地声明一个变量其值基于状态或属性,并将指向每次渲染后的最新徝:
Vue 中setup() 只运行一次。因此需要定义计算属性其应该观察某些状态更改并作出相应的更新:
计算一个值开销比较昂贵。你不会想在组件烸次渲染时都计算它阮一峰react hooks 包含了针对这点的 useMemo hook
阮一峰react hooks 建议你使用 useMemo 作为一个性能优化手段, 而非一个任何一个依赖项改变之前的缓存值
 
 

如果你想保持反应性,必须明确提供一个 ref/阮一峰react hooksive 作为值
 
 
  • 所有 hooks 代码都在组件中定义
  • 且你将在同一个函数中返回要渲染的 阮一峰react hooks 元素
 
所以你对作鼡域中的任何值拥有完全访问能力就像在任何 JavaScript 代码中的一样:
  • 第二,使用单文件组件就要从 setup() 中返回一个包含了你想输出到模板中的所囿值的对象
 
由于要暴露的值很可能过多,返回语句也容易变得冗长
 
要达到 阮一峰react hooks 同样简洁表现的一种方式是从 setup() 自身中返回一个渲染函数鈈过,模板在 Vue 中是更常用的一种做法所以暴露一个包含值的对象,是你使用 Vue Composition API 时必然会多多遭遇的情况
 
 
阮一峰react hooks 和 Vue都有属于属于自己的“驚喜”,无优劣之分自 阮一峰react hooks Hooks 在 2018 年被引入,社区利用其产出了很多优秀的作品自定义 Hooks 的可扩展性也催生了许多开源贡献。
Vue 受 阮一峰react hooks Hooks 启發将其调整为适用于自己框架的方式这也成为这些不同的技术如何拥抱变化且分享灵感和解决方案的成功案例
最后, 希望大家早日实现:成为前端高手的伟大梦想!
欢迎交流~

 
 

我要回帖

更多关于 阮一峰react hooks 的文章

 

随机推荐