成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么 Hooks?請叫我 Composables !

開發 前端
hook 翻譯過來是鉤子的意思。hooks 作為復數,直譯就是 多個鉤子,在開發領域中特指 鉤子函數。在開發領域,最初的 hook 是和回調鉤子綁定的。比如我們常說的 git hooks 指的就是在 git 提交的時候所產生的多個回調鉤子函數。

Hello,大家好,我是 Sunday。

昨天跟一位同學聊天,說到:“在 Vue 中 hooks 是否可以使用 Vue 的生命周期?”

我一下就沒反應過來 “Vue 中有 hooks 了嗎?”。后來才明白,人家那叫 Composables(組合式函數)

1. 什么是 hooks?

hook 翻譯過來是鉤子的意思。hooks 作為復數,直譯就是 多個鉤子,在開發領域中特指 鉤子函數。

在開發領域,最初的 hook 是和回調鉤子綁定的。比如我們常說的 git hooks 指的就是在 git 提交的時候所產生的多個回調鉤子函數。

圖片圖片

不過,在 React 16.8 的版本之后,React 文檔中提到了 React Hooks 的概念。

圖片圖片

React Hooks 與傳統 hook 的概念不太相同,他表示的是:以 use 開頭的自定義函數

在 React 中,所有內置的 Hooks 和社區約定的自定義 Hooks 函數都遵循以 use 開頭的命名規則

自此,hooks 的概念才進入到大部分開發者的視野中。

2. Vue 中的 “hooks”

Vue 中嚴格來說 不存在 hooks 的概念。但是,卻有非常類似(也有人說是抄襲)的概念,這就是 Composables(組合式函數)

“組合式函數”(Composables) 是一個利用 Vue 的組合式 API 來封裝和復用有狀態邏輯的函數。

與 React 相同,它(Composables)的命名也要求 以 use 開頭的駝峰標識,而返回值則盡量返回 以 ref 包裹的響應式數據

在 Vue 的官方文檔中,描述了 Composables 與 React Hooks 的關系:

圖片圖片

3. Composables 示例

接下來,我們就通過一個 鼠標跟蹤器示例,來更加清楚的了解下 Composables 的應用場景。

3.1 監聽鼠標位置的直接寫法

如果我們要直接在組件中使用組合式 API 實現鼠標跟蹤功能,它的代碼會是這樣:

<script setup>
import { ref, onMounted, onUnmounted } from 'vue'

const x = ref(0)
const y = ref(0)

function update(event) {
  x.value = event.pageX
  y.value = event.pageY
}

onMounted(() => window.addEventListener('mousemove', update))
onUnmounted(() => window.removeEventListener('mousemove', update))
</script>

<template>Mouse position is at: {{ x }}, {{ y }}</template>

這個代碼邏輯并不復雜:

  1. 首先我們使用 ref 定義了兩個響應式數據 x、y
  2. 然后在 onMounted 和 onUnmounted 生命周期中,完成事件的掛載和銷毀
  3. 通過 update 方法,修改響應式數據的值,并展示在頁面中

這樣的代碼作用在單獨的組件里,如果想要 復用 就比較麻煩了。因此,就可以使用 Composables

3.2 使用 Composables

基于 Composables 封裝該邏輯:

// mouse.js
import { ref, onMounted, onUnmounted } from 'vue'

// 按照慣例,組合式函數名以“use”開頭
export function useMouse() {
  // 被組合式函數封裝和管理的狀態
  const x = ref(0)
  const y = ref(0)

  // 組合式函數可以隨時更改其狀態。
  function update(event) {
    x.value = event.pageX
    y.value = event.pageY
  }

  // 一個組合式函數也可以掛靠在所屬組件的生命周期上
  // 來啟動和卸載副作用
  onMounted(() => window.addEventListener('mousemove', update))
  onUnmounted(() => window.removeEventListener('mousemove', update))

  // 通過返回值暴露所管理的狀態
  return { x, y }
}

根據以上代碼所以,我們可知:

  1. Composables 中,應 盡量使用 ref
  2. Composables 中,生命周期可正常調用,就像我們寫普通的 js 一樣

下面是它在組件中使用的方式:

<script setup>
import { useMouse } from './mouse.js'

const { x, y } = useMouse()
</script>

<template>Mouse position is at: {{ x }}, {{ y }}</template>

責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2025-03-06 03:00:00

hook??復數函數

2014-02-13 10:15:39

編程業余愛好

2010-06-07 15:07:34

云計算

2024-02-05 21:48:25

VueReactHooks

2019-08-20 15:16:26

Reacthooks前端

2022-04-08 10:15:29

VueReacHooks

2019-12-30 14:34:33

NumpyPython數據科學

2023-07-14 22:36:42

Node.jsStorage

2021-03-18 08:00:55

組件Hooks React

2023-11-06 08:00:00

ReactJavaScript開發

2021-04-06 10:15:29

Node.jsHooks前端

2019-03-13 10:10:26

React組件前端

2021-07-13 07:52:03

ReactHooks組件

2022-06-27 09:00:55

SwiftGit Hooks

2022-03-31 17:54:29

ReactHooks前端

2020-09-19 17:46:20

React Hooks開發函數

2022-07-18 09:01:58

React函數組件Hooks

2020-10-28 09:12:48

React架構Hooks

2022-08-21 09:41:42

ReactVue3前端

2023-02-10 18:32:21

項目管理實踐
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美一区二区三区在线 | 日本又色又爽又黄又高潮 | 国产精品自产拍在线观看蜜 | 日本久久一区 | 在线免费看毛片 | 在线播放国产一区二区三区 | 男人天堂网址 | 国产精品一区二区三区四区五区 | 国产亚洲欧美日韩精品一区二区三区 | 久久久成人精品 | 福利一区视频 | 日韩欧美一区二区三区免费观看 | 亚洲一二三区不卡 | 精品美女视频在线观看免费软件 | 国产精品色哟哟网站 | 免费日本视频 | 日日夜夜精品视频 | 欧美片网站免费 | 91九色视频| 播放一级毛片 | 在线视频 亚洲 | 日韩高清www | 国产黄色在线观看 | 国产高清自拍视频在线观看 | 九色一区 | 国产一级毛片视频 | 欧美极品在线视频 | 久久久久久免费毛片精品 | av毛片| 欧美性大战xxxxx久久久 | 久久国产亚洲精品 | 亚洲视频手机在线 | 日本午夜免费福利视频 | 91成人在线| 美女日批免费视频 | 欧美啪啪| 国产jizz女人多喷水99 | 亚洲精品在线看 | 免费一级片| 久久久一区二区 | 天天操妹子 |