Hooks是什么?为啥Vue和React都选择了它?

IT科技2025-11-05 09:29:453

Hooks是为啥什么

"hooks" 直译是 “钩子”,它并不仅是选择 react,甚至不仅是为啥前端界的专用术语,而是选择整个行业所熟知的用语。通常指:系统运行到某一时期时,为啥会调用被注册到该时机的选择回调函数。

为啥要用Hooks

跨组件复用stateful logic十分困难 使用Hooks,为啥你可以在将含有state的选择逻辑从组件中抽象出来,这将可以让这些逻辑容易被测试。为啥同时,选择Hooks可以帮助你在不重写组件结构的为啥情况下复用这些逻辑。复杂的选择组件难以理解 Hooks允许您根据相关部分(例如设置订阅或获取数据)将一个组件分割成更小的函数,而不是为啥强制基于生命周期方法进行分割。不止是选择用户,机器也对Classes难以理解 Hooks让你可以在classes之外使用更多React的为啥新特性。

Hooks的优点

更好的状态复用

假设有如下需求:

当组件实例创建时,需要创建一个 state 属性:name,站群服务器并随机给此 name 属性赋值一个初始值。除此之外,还得提供一个 setName 方法。你可以在组件其他地方开销和修改此状态属性。

更重要的是: 这个逻辑要可以复用,在各种业务组件里复用这个逻辑。

在拥有 Hooks 之前,我首先会想到的解决方案一定是 mixin。

代码如下:(此示例采用 vue2 mixin 写法 )。

// 混入文件:name-mixin.js

export default {

data() {

return {

name: genRandomName() // 假如它能生成随机的名字

}

},

methods: {

setName(name) {

this.name = name

}

}

}

// 组件:my-component.vue

{{ name}}

import nameMixin from ./name-mixin;

export default {

mixins: [nameMixin],

// 通过mixins, 你可以直接获得 nameMixin 中所定义的状态、方法、生命周期中的事件等

mounted() {

setTimeout(() => {

this.setName(Tom)

}, 3000)

}

}

<script>

虽然看起来好像是可以复用的,但是React官方出来说话了。

既然被毙了,肯定是有它的原因的,虽然是可以实现复用,但是显露的弊端也是源码下载非常的明显的。

方法和属性难以监听

export default {

mixins: [ a, b, c, d, e, f, g ], // 当然,这只是表示它混入了很多能力

mounted() {

console.log(this.name)

// mmp!这个 this.name 来自于谁?我难道要一个个混入看实现?

}

}

属性、方法会覆盖

当我同时想混入 mixin-a.js 和 mixin-b.js 以同时获得它们的属性或者方法的时候,比较尴尬的事情发生了:由于这两个 mixin 功能的开发者心有灵犀,它们都定义了 this.name 作为属性。这种时候,这个时候的你就会傻傻分不清。

代码结构

这就是为啥Vue3尤大大使用CompostionAPI的原因了。

这样带来的好处是显而易见的:“高度聚合,可阅读性提升”。伴随而来的便是 “效率提升,bug变少”。

趋势

2019年年初,react 在 16.8.x 版本正式具备了 hooks 能力。2019年6月,尤雨溪在 vue/github-issues 里提出了关于 vue3 Component API 的提案。b2b信息网(vue hooks的基础)在后续的 react 和 vue3 相关版本中,相关 hooks 能力都开始被更多人所接受。除此之外,solid.js、 preact 等框架,也是开始选择加入 hooks 大家庭。

本文地址:http://www.bzve.cn/news/247c62499128.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

Ubuntu 9.04正式版安装好已经有段日子了,早在几天前就安装KDE4.2.2桌面环境,用惯了Gnome环境,转到KDE桌面,感觉别有特色。下面我们来说说在Ubuntu 9.04正式版下安装KDE4.2.2桌面环境的全过程,高手飘过,不过对于Linux新手值得一看。老规矩,先看看Ubuntu 9.04的KDE4.2.2桌面截图,(见图1)点击查看清晰大图。图11、添加KDE4.2.2软件源,打开软件源,见图2。在第三方软件(见图3)这里添加以下的源(见图4)。deb http://ppa.launchpad.net/kUbuntu-experimental/ubuntu intrepid main2、关闭“软件源”后会自动提醒更新源文件,你就按提示稍等一会。网上说有的说在终端加入钥匙,但是我试下有错,就没有加也行,大家可以自己试下。gpg –keyserver keyserver.Ubuntu.com –recv-keys 493B3065 && gpg –export -a 493B3065 | sudo apt-key add -图2图3图4图5再打开终端,输入以下命令(见图5)sudo apt-get install kUbuntu-kde4-desktop再输入密码,正在读取软件包列表... 完成正在分析软件包的依赖关系树       正在读取状态信息... 完成       注意,选取 kUbuntu-desktop 而非 kubuntu-kde4-desktop将会安装下列额外的软件包:共升级了 0 个软件包,新安装了 198 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。需要下载 194MB 的软件包。解压缩后会消耗掉 702MB 的额外空间。您希望继续执行吗?[Y/n]见图6图6安装到完成时会有如下提示:(见图7)图7接着会让你选择Ubuntu 9.04的默认显示管理器,我还是选择gdm,你也可以选择kdm。(见图8)图8最后搞定,重新启动进入,选择KDE桌面环境进入。即可进入KDE4.2.2桌面环境。图9:收藏夹

十五张图带你快速入门 Shardingsphere-Proxy

使用Langchain构建简单的数据库Agent

研究人员发现新方法防御 AI 模型的通用越狱攻击

国产好用的Linux系统推荐(解放你的操作系统选择,尝试国产Linux系统)

Nginx 转发时的一个坑,运维居然让我背锅!

聊聊 Redis 的高可用

GreatSQL 构建高效 HTAP 服务架构指南

友情链接

滇ICP备2023006006号-39