广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Hooks与vue的相关知识点有哪些
  • 442
分享到

Hooks与vue的相关知识点有哪些

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

这篇文章将为大家详细讲解有关Hooks与Vue的相关知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Hooks是React在V16.7.0-alpha版本中引入

这篇文章将为大家详细讲解有关Hooks与Vue的相关知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Hooks是React在V16.7.0-alpha版本中引入的,Hooks主要是对模式的复用提供了一种更明确的思路。

Hooks与vue的相关知识点有哪些

不要把 Hooks 和 Vue 的生命周期钩子(Lifecycle Hooks) 弄混了,Hooks 是 React 在 V16.7.0-alpha 版本中引入的,而且几天后 Vue 发布了其概念验证版本。虽然 Hooks 是由 React 提出的,它是一个对各 javascript 框架生态系统都有价值的、重要的组合机制,因此我们今天会花一点时间讨论 Hooks 意味着什么。

Hooks主要是对模式的复用提供了一种更明确的思路 —— 避免重写组件本身,并允许有状态逻辑的不同部分能无缝地进行协同工作。

最初的问题

就 React 而言,问题在于:在表达状态的概念时,类是最常见的组件形式。无状态函数式组件也非常受欢迎,但由于它们只能单纯地渲染,所以它们的用途仅限于展示任务。

类本身存在一些问题。例如,随着 React 变得越来越流行,类的问题也普遍成为新手的阻碍。开发者为了理解 React,也必须理解类。绑定使得代码冗长且可读性差,并且需要理解 JavaScript 中的 this。这里还讨论了使用类所带来的一些优化障碍。

在逻辑复用方面,我们通常使用 render props 和高阶组件等模式。但使用这些模式后会发现自己处于类似的“厄运金字塔”中 —— 样式实现地狱,即过度使用嵌套可能会导致组件难以维护。这导致我想对 Dan Abramov 像喝醉了一样大吼大叫,没有人想要那样。

Hooks 允许我们使用函数调用来定义组件的有状态逻辑,从而解决这些问题。这些函数调用变得更具有组合性、可复用性,并且允许我们在使用函数式组件的同时能够访问和维护状态。React 发布 Hooks 时,人们很兴奋 —— 下面你可以看到 Hooks 展示的一些优势,关于它们如何减少代码和重复:

在维护方面,简单性是关键,Hooks 提供了一种单一的、函数式的方式来实现逻辑共享,并且可能代码量更小。

为什么 Vue 中需要 Hooks?

读到这里你肯定想知道 Hooks 在 Vue 中必须提供什么。这似乎是一个不需要解决的问题。毕竟,类并不是 Vue 主要使用的模式。Vue 提供无状态函数式组件(如果需要它们),但为什么我们需要在函数式组件中携带状态呢?我们有 mixins 用于组合可以在多个组件复用的相同逻辑。问题解决了。

我想到了同样的事情,但在与 Evan You 交谈后,他指出了我忽略的一个主要用例:mixins 不能相互消费和使用状态,但 Hooks 可以。这意味着如果我们需要链式封装逻辑,可以使用 Hooks。

Hooks 实现了 mixins 的功能,但避免了 mixins 带来的两个主要问题:

  • 允许相互传递状态。

  • 明确指出逻辑来自哪里。

如果使用多个 mixins,我们不清楚哪个属性是由哪个 mixins 提供的。使用 Hooks,函数的返回值会记录消费的值。

那么,这在 Vue 中如何运行呢?我们之前提到过,在使用 Hooks 时,逻辑在函数调用时表达从而可复用。在 Vue 中,这意味着我们可以将数据调用、方法调用或计算属性调用封装到另一个自定义函数中,并使它们可以自由组合。数据、方法和计算属性现在可用于函数式组件了。

例子

让我们来看一个非常简单的 hook,以便我们在继续学习 Hooks 中的组合例子之前理解构建块。

useWat?

好的,Vue Hooks 和 React Hooks 之间存在交叉部分。使用 use 作为前缀是 React 的约定,所以如果你在 React 中查找 Hooks,你会发现 Hooks 的名称都会像 useStateuseEffect 等。更多信息可以查看这里。

在 Evan 的在线 demo 里,你可以看到他在何处访问 useStateuseEffect 并用于 render 函数。

如果你不熟悉 Vue 中的 render 函数,那么看一看官网文档可能会有所帮助。

但是当我们使用 Vue 风格的 Hooks 时,我们会如何命名呢 —— 你猜对了 —— 比如:useDatauseComputed等。

因此,为了让我们看看如何在 Vue 中使用 Hooks,我创建了一个示例应用程序供我们探索。

在 src/hooks 文件夹中,我创建了一个 hook,它在 useMounted hook 上阻止了滚动,并在 useDestroyed 上重新启用滚动。这有助于我在打开查看内容的对话框时暂停页面滚动,并在查看对话框结束时再次允许滚动。这是一个好的抽象功能,因为它在整个应用程序中可能会多次使用。

import { useDestroyed, useMounted } from "vue-hooks";export function preventscroll() {
  const preventDefault = (e) => {
    e = e || window.event;    if (e.preventDefault)
      e.preventDefault();
    e.returnValue = false;
  }

  // keycodes for left, up, right, down
  const keys = { 37: 1, 38: 1, 39: 1, 40: 1 };

  const preventDefaultForScrollKeys = (e) => {    if (keys[e.keyCode]) {
      preventDefault(e);      return false;
    }
  }

  useMounted(() => {    if (window.addEventListener) // older FF
      window.addEventListener('DOMMouseScroll', preventDefault, false);
    window.onwheel = preventDefault; // modern standard
    window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
    window.touchmove = preventDefault; // mobile
    window.touchstart = preventDefault; // mobile
    document.onkeydown = preventDefaultForScrollKeys;
  });

  useDestroyed(() => {    if (window.removeEventListener)
      window.removeEventListener('DOMMouseScroll', preventDefault, false);

    //firefox
    window.addEventListener('DOMMouseScroll', (e) => {
      e.stopPropagation();
    }, true);

    window.onmousewheel = document.onmousewheel = null;
    window.onwheel = null;
    window.touchmove = null;
    window.touchstart = null;
    document.onkeydown = null;
  });
}

然后我们可以在像 AppDetails.vue 一样的 Vue 组件中调用它:

<script>
import { preventscroll } from "./../hooks/preventscroll.js";
...export default {
  ...  hooks() {
    preventscroll();
  }
}
</script>

我们不仅可以在该组件中使用它,还可以在整个应用程序中使用相同的功能!

能够相互理解的两个 Hooks

我们之前提到过,Hooks 和 mixins 之间的主要区别之一是 Hooks 实际上可以互相传值。让我们看一下这个简单但有点不自然的例子。

在我们的应用程序中,我们需要在一个可复用的 hook 中进行计算,还有一些需要使用该计算结果的东西。在我们的例子中,我们有一个 hook,它获取窗口宽度并将其传递给动画,让它知道只有当我们在更大的屏幕上时才会触发。

详见视频演示:CSS-tricks.com/wp-content/…

第一个 hook:

import { useData, useMounted } from 'vue-hooks';export function windowwidth() {
  const data = useData({
    width: 0
  })

  useMounted(() => {
    data.width = window.innerWidth
  })

  // this is something we can consume with the other hook  return {
    data
  }
}

然后,在第二个 hook 中,我们使用它来创建一个触发动画逻辑的条件:

// the data comes from the other hookexport function loGolettering(data) {
  useMounted(function () {
    // this is the width that we stored in data from the previous hook    if (data.data.width > 1200) {
      // we can use refs if they are called in the useMounted hook
      const logoname = this.$refs.logoname;
      Splitting({ target: logoname, by: "chars" });

      TweenMax.staggerFromTo(".char", 5,
        {
          opacity: 0,
          transfORMOrigin: "50% 50% -30px",
          cycle: {
            color: ["red", "purple", "teal"],
            rotationY(i) {              return i * 50
            }
          }
        },
        ...

然后,在组件内部,我们将一个 hook 作为参数传递给另一个 hook:

<script>
import { logolettering } from "./../hooks/logolettering.js";
import { windowwidth } from "./../hooks/windowwidth.js";export default {  hooks() {
    logolettering(windowwidth());
  }
};
</script>

现在我们可以在整个应用程序中使用 Hooks 来编写逻辑!再提一下,这是一个用于演示目的不太自然的例子,但你可以看到这对于大型应用程序,将逻辑保存在较小的、可复用的函数中是有效的

关于“Hooks与vue的相关知识点有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Hooks与vue的相关知识点有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • Hooks与vue的相关知识点有哪些
    这篇文章将为大家详细讲解有关Hooks与vue的相关知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Hooks是React在V16.7.0-alpha版本中引入...
    99+
    2022-10-19
  • AMM与ASMM相关知识点有哪些
    这篇文章主要讲解了“AMM与ASMM相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“AMM与ASMM相关知识点有哪些”吧!一、AMM相关知识:...
    99+
    2022-10-19
  • HashMap相关知识点有哪些
    本篇内容介绍了“HashMap相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HashMap 和 HashSet 是 Java...
    99+
    2023-06-17
  • YARN相关知识点有哪些
    本篇内容介绍了“YARN相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!YARN产生背景为什么会产生YRAN?这个与MapRe...
    99+
    2023-06-19
  • Baseline相关知识点有哪些
    本篇内容主要讲解“Baseline相关知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Baseline相关知识点有哪些”吧! 在 Oracle Da...
    99+
    2022-10-19
  • CSS相关知识点有哪些
    本篇内容介绍了“CSS相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、CSS选择器 ...
    99+
    2022-10-19
  • Git相关知识点有哪些
    这篇文章主要讲解了“Git相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Git相关知识点有哪些”吧!一、Git工作流程以上包括一些简单而常用...
    99+
    2022-10-19
  • MySQL相关知识点有哪些
    这篇文章主要介绍了MySQL相关知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1、数据库架构1.1...
    99+
    2022-10-19
  • KeyDB的相关知识点有哪些
    今天小编给大家分享一下KeyDB的相关知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。线程模型KeyDB将redi...
    99+
    2023-06-19
  • synchronized的相关知识点有哪些
    这篇文章主要讲解了“synchronized的相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“synchronized的相关知识点有哪些”吧!...
    99+
    2022-10-19
  • JVM相关的知识点有哪些
    这篇文章主要讲解了“JVM相关的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM相关的知识点有哪些”吧!JVM作为java运行的基础,很难相...
    99+
    2022-10-19
  • 有哪些Java的相关知识点
    这篇文章主要介绍“有哪些Java的相关知识点”,在日常操作中,相信很多人在有哪些Java的相关知识点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些Java的相关知识点”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-16
  • React的相关知识点有哪些
    这篇文章主要介绍“React的相关知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React的相关知识点有哪些”文章能帮助大家解决问题。React与传统MVC的关系轻量级的视图层库!A J...
    99+
    2023-06-03
  • Git的相关知识点有哪些
    这篇文章主要介绍“Git的相关知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Git的相关知识点有哪些”文章能帮助大家解决问题。分支和合并Git 跟其他版本控制系统***的优势就在于其高级...
    99+
    2023-06-17
  • Vue loader的相关知识有哪些
    本篇内容介绍了“Vue loader的相关知识有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、处理资源路径当 Vue Loader ...
    99+
    2023-07-05
  • Vue生命周期的相关知识点有哪些
    这篇文章主要为大家展示了“Vue生命周期的相关知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue生命周期的相关知识点有哪些”这篇文章吧。1. 生命周期(重要)1.1 初步认识生命周...
    99+
    2023-06-29
  • mysql binlog相关知识点有哪些
    本篇内容主要讲解“mysql binlog相关知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql binlog相关知识点有哪些”吧! ...
    99+
    2022-10-19
  • library cache相关知识点有哪些
    library cache相关知识点有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。共享游标Sql首次解析后会生成父游标和1个子游标(...
    99+
    2022-10-19
  • java Shiro相关知识点有哪些
    这篇文章主要介绍了java Shiro相关知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java Shiro相关知识点有哪些文章都会有所收获,下面我们一起来看看吧。1.权限的管理1.1 什么是权限管...
    99+
    2023-07-06
  • Oracle Cursor的相关知识点有哪些
    本篇内容介绍了“Oracle Cursor的相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作