最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Hooks對于Vue作用意義詳解

 更新時間:2022年06月16日 15:20:18   作者:掘金安東尼  
這篇文章主要為大家介紹了Hooks對于Vue作用意義詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

本篇主體譯自:https://css-tricks.com/what-hooks-mean-for-vue/

作者:Sarah Drasner

OS:雖然這是一篇 19 年 4 月的文章,但是對于 Hooks 說的非常清晰,作者也是請到尤大進(jìn)行了原文的訂正,對于了解 Vue Hooks 的設(shè)計及發(fā)展,還是有很好的閱讀性的。

本文要談到的 Hooks,不同于 Lifecycle Hooks(生命周期鉤子),它是在 v16.7.0-alpha 中引入 React 的;盡管 Hooks 是由 React 提出,但是它的本質(zhì)是一種重要的代碼組合機(jī)制,對于整個 JavaScript 的框架系統(tǒng)都大有好處;今天花點(diǎn)時間具體來談?wù)劊?strong>Hooks 對于 Vue 意義著什么?

Hooks 提供了一種更明確的方式來組織代碼,使得代碼能重用,更重要的是,它允許不同的邏輯部分進(jìn)行通信、協(xié)同工作。

問題背景

Hooks 為什么被提出?就 React 而言,最初的問題背景是這樣的:

在表達(dá)狀態(tài)概念時, 是最常見的組織形式。類本身存在一些問題,比如綁定關(guān)系冗長、復(fù)雜,導(dǎo)致不易讀,This 的指向總會讓人摸不清頭腦;

不僅如此,在重用方面,使用渲染工具或高階組件類的模式很常見,但這樣容易陷入 “pyramid of doom” (末日金字塔),可以將它理解為過度的嵌套關(guān)系;

Hooks 就是來解決這些問題的;Hooks 允許我們使用函數(shù)調(diào)用來定義組件的狀態(tài)邏輯,這些函數(shù)有更強(qiáng)的組合性、重用性;同時,仍然可以進(jìn)行狀態(tài)的訪問和維護(hù);

示例:@dan_abramov's code from #ReactConf2018

圖①

圖②

有圖①到圖②的轉(zhuǎn)變,對組件代碼進(jìn)行了再次組合,然后以函數(shù)的的方式進(jìn)行導(dǎo)出,供外部重用;

在維護(hù)方面,Hooks 提供了一種單一的、功能性的方式來處理共享邏輯,并有可能減少代碼量。

Vue Hooks

那 Vue 中為什么要用 Hooks 呢?畢竟 Vue 中沒有很頻繁的使用類;在 Vue 中我們使用 mixin 來解決組件相同的重用邏輯;

mixin 的問題在哪?Hooks 能解決嗎?

問題主要有兩點(diǎn):

  • mixin 之間不能傳遞狀態(tài);
  • 邏輯來源并沒有清晰的說明;

而這兩點(diǎn),Hooks 能很好地解決;

舉個例子:

傳遞狀態(tài)

Hooks1

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
  }
}

Hooks2

// the data comes from the other hook
export 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
            }
          }
        },
        ...

兩個鉤子之間傳值:

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

我們可以在整個應(yīng)用程序中使用 Hooks 組合邏輯;

來源清晰

在 src/hooks 文件夾中,創(chuàng)建了一個 Hooks,用于實(shí)現(xiàn):打開對話框查看內(nèi)容時,暫停頁面,并在查看完對話框后,允許再次滾動。

它很有可能在應(yīng)用程序中被多次使用;

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 組件中調(diào)用它:

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

小結(jié)

原文小結(jié)

Vue Hooks 已經(jīng)可以與 Vue 2.x 一起使用,但仍處于試驗階段。我們計劃將 Hooks 集成到 Vue 3 中,但是它跟 React Hooks 還是會有所差異;

本瓜小結(jié)

Hooks 已經(jīng)應(yīng)用到 Vue3 了,也就是 setup 那一坨,但是它確實(shí)有一些不同于 React 的 Hooks 的地方;推薦閱讀 Vue3 究竟好在哪里?(和 React Hook 的詳細(xì)對比);

其實(shí)理解到它的設(shè)計意圖了,即使不原原本本的挪用框架,自己用 JS 原生,也能整一個類似的復(fù)用邏輯吧。把實(shí)現(xiàn)一個完整功能的邏輯,封裝進(jìn)一個函數(shù)中,就看函數(shù)名稱,就知道它是干嘛的了,不用知道其內(nèi)部實(shí)現(xiàn),如果想知道,再到對應(yīng)的 hooks 里面去找,至少就這一點(diǎn)來說,和函數(shù)式編程設(shè)計思路是一致的;

以上就是Hooks之于Vue意義詳解的詳細(xì)內(nèi)容,更多關(guān)于Hooks Vue意義的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue中的Vux配置指南

    Vue中的Vux配置指南

    Vux是Vue.js的一個ui庫,官網(wǎng)在這里,官方文檔的配置指南側(cè)重于技術(shù)的羅列,我這里簡化一下Vux的配置流程。感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2017-12-12
  • Vue中this.$emit和this.$on的使用

    Vue中this.$emit和this.$on的使用

    這篇文章主要介紹了Vue中this.$emit和this.$on的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue組件實(shí)現(xiàn)可搜索下拉框擴(kuò)展

    vue組件實(shí)現(xiàn)可搜索下拉框擴(kuò)展

    這篇文章主要為大家詳細(xì)介紹了vue組件實(shí)現(xiàn)可搜索下拉框的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 最細(xì)致的vue.js基礎(chǔ)語法 值得收藏!

    最細(xì)致的vue.js基礎(chǔ)語法 值得收藏!

    這篇文章主要為大家推薦了一篇值得收藏和學(xué)習(xí)的vue.js最細(xì)致的基礎(chǔ)語法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • vue中的rem如何配置

    vue中的rem如何配置

    這篇文章主要介紹了vue中的rem如何配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue開發(fā)實(shí)例探究key的作用詳解

    Vue開發(fā)實(shí)例探究key的作用詳解

    這篇文章主要為大家介紹了Vue開發(fā)實(shí)例探究key的作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • vue項目中圖片選擇路徑位置static或assets的區(qū)別及說明

    vue項目中圖片選擇路徑位置static或assets的區(qū)別及說明

    這篇文章主要介紹了vue項目中圖片選擇路徑位置static或assets的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue組件之間的通信你知道多少

    Vue組件之間的通信你知道多少

    這篇文章主要為大家詳細(xì)介紹了Vue組件之間的通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • until封裝watch常用邏輯簡化代碼寫法

    until封裝watch常用邏輯簡化代碼寫法

    這篇文章主要介紹了until將watch最常用的邏輯進(jìn)行封裝簡化代碼寫法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue中路由傳參6種方式總結(jié)

    vue中路由傳參6種方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了vue中路由傳參6種方式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-08-08

最新評論

石渠县| 滁州市| 松溪县| 界首市| 庐江县| 平阳县| 平定县| 上思县| 双鸭山市| 陆良县| 望都县| 永城市| 葵青区| 胶南市| 保靖县| 大名县| 青冈县| 渝中区| 曲周县| 穆棱市| 桐城市| 卓资县| 台中县| 宿迁市| 伊宁县| 渑池县| 高清| 宜兰县| 南郑县| 彭泽县| 沙雅县| 常山县| 威远县| 德惠市| 河池市| 青冈县| 郑州市| 汽车| 梨树县| 沂水县| 隆德县|