我为什么要使用Hooks?

本文探讨了为何Vue3.0引入Hooks,旨在解决代码维护、逻辑复用和类型推断的问题。通过与高阶组件(HOC)对比,展示了Hooks在组件间逻辑复用的优越性,例如在请求场景中的简洁性。同时,文章指出Vue Hooks与React Hooks的差异,如调用顺序要求的不同,以及Vue Hooks在性能和依赖跟踪上的优势。
摘要由CSDN通过智能技术生成

一、背景

Vue 3.0已经出到3.0.5了,React Hooks大家也用的如日中天。整天大家都在讨论Hooks,Hooks,那么Hooks式的编程到底有什么好处?

还记得当时Vue3.0 beta版本发布的时候,社区多少的反对声音:

  • 意大利面代码结构吐槽:

“太失望了。杂七杂八一堆丢在 setup 里,我还不如直接用 react”
我的天,3.0 这么搞的话,代码结构不清晰,语义不明确,无异于把 vue 自身优点都扔了
怎么感觉代码结构上没有 2.0 清晰了呢 这要是代码量上去了是不是不好维护啊

  • 抄袭 React 吐槽:

抄来抄去没自己的个性
有 react 香吗?越来越像 react 了

在我看来,Vue 黑暗的一天还远远没有过去,很多人其实并没有认真的去看Vue-Composition-Api 文档中的 动机 章节,本文就以这个章节为线索,从 代码结构、底层原理 等方面来一一打消大家的一些顾虑。本篇文章与你使用Vue3.0或者React无关,因为在Hooks思想上,他们本质上是一致的。

一、Vue3.0的设计动机

大如Vue3这种全球热门的框架,任何一个 breaking-change的设计一定有它的深思熟虑和权衡,那么 composition-api出现是为了解决什么问题呢?这是一个我们需要首先思考明白的问题。

首先抛出 Vue2的代码模式下存在的几个问题。

  • 随着功能的增长,复杂组件的代码变得越来越难以维护。 尤其发生你去新接手别人的代码时。 根本原因是 Vue 的现有 API 通过「选项」组织代码,但是在大部分情况下,通过逻辑考虑来组织代码更有意义。
  • 缺少一种比较「干净」的在多个组件之间提取和复用逻辑的机制。
  • 类型推断不够友好。

逻辑重用

相信很多接触过React Hook的小伙伴已经对这种模式下组件间逻辑复用的简单性有了一定的认知,自从 React 16.7 发布以来,社区涌现出了海量的 Hook轮子,以及主流的生态库react-routerreact-redux等等全部拥抱 Hook,都可以看出社区的同好们对于Hook开发机制的赞同。

其实组件逻辑复用在 React 中是经历了很长的一段发展历程的, mixin -> HOC & render-props -> Hook,mixin 是 React 中最早启用的一种逻辑复用方式,因为它的缺点实在是多到数不清,而后面的两种也有着自己的问题,比如增加组件嵌套啊、props 来源不明确啊等等。可以说到目前为止,Hook是相对完美的一种方案。

当然,我的一贯风格就是上代码对比,我就拿 HOC 来说吧,Github 上的一个真实的开源项目里就出现了这样的场景:

HOC 对比 Hook

class MenuBar extends React.Component {
   
  // props 里混合着来自各个HOC传入的属性,还有父组件传入的属性。
  handleClickNew() {
   
    const readyToReplaceProject = this.props.confirmReadyToReplaceProject(
      this.props.intl.formatMessage(sharedMessages.replaceProjectWarning)
    );
    this.props.onRequestCloseFile();
    if (readyToReplaceProject) {
   
      this.props.onClickNew(this.props.canSave && this.props.canCreateNew);
    }
    this.props.onRequestCloseFile();
  }
  handleClickRemix() {
   
    this.props.onClickRemix();
    this.props.onRequestCloseFile();
  }
  handleClickSave() {
   
    this
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于YOLOv8的各种瓶子识别检测系统源码(部署教程+训练好的模型+各项评估指标曲线).zip 平均准确率:0.95 类别:bottle 【资源介绍】 1、ultralytics-main ultralytics-main为YOLOv8源代码,里面涵盖基于yolov8分类、目标检测额、姿态估计、图像分割四部分代码,我们使用的是detect部分,也就是目标检测代码 2、搭建环境 安装anacondapycharm windows系统、mac系统、Linux系统都适配 在anaconda中新建一个新的envs虚拟空间(可以参考博客来),命令窗口执行:conda create -n YOLOv8 python==3.8 创建完YOLOv8-GUI虚拟空间后,命令窗口执行:source activate YOLOv8 激活虚拟空间 然后就在YOLOv8虚拟空间内安装requirements.txt中的所有安装包,命令窗口执行:pip install -r requirements.txt 使用清华源安装更快 3、训练模型过程 进入到\ultralytics-main\ultralytics\yolo\v8\detect\文件夹下,datasets即为我们需要准备好的数据集训练其他模型同理。 data文件夹下的bicycle.yaml文件为数据集配置文件,该文件为本人训练自行车检测模型时创建,训练其他模型,可自行创建。博文有介绍https://blog.csdn.net/DeepLearning_?spm=1011.2415.3001.5343 train.py中238行,修改为data = cfg.data or './bicycle.yaml' # or yolo.ClassificationDataset("mnist") 237行修改自己使用的预训练模型 若自己有显卡,修改239行,如我有四张显卡,即改成args = dict(model=model, data=data, device=”0,1,2,3“) 以上配置完成后运行train.py开始训练模型,训练完毕后会在runs/detect/文件夹下生成train*文件夹,里面包含模型和评估指标等 4、推理测试 训练好模型,打开predict.py,修改87行,model = cfg.model or 'yolov8n.pt',把yolov8n.pt换成我们刚才训练完生成的模型路径(在\ultralytics-main\ultralytics\yolo\v8\detect\runs\detect文件夹下),待测试的图片或者视频存放于ultralytics\ultralytics\assets文件夹, 运行predict.py即可,检测结果会在runs/detect/train文件夹下生成。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值