成人免费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前端

2019-12-30 14:34:33

NumpyPython數據科學

2022-04-08 10:15:29

VueReacHooks

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前端

2022-08-21 09:41:42

ReactVue3前端

2020-09-19 17:46:20

React Hooks開發函數

2022-07-18 09:01:58

React函數組件Hooks

2020-10-28 09:12:48

React架構Hooks

2021-04-09 08:13:14

API網關互聯網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频一视频二 | 国偷自产av一区二区三区 | 91国产在线视频在线 | 97国产精品 | 日韩成人在线播放 | av片免费观看 | 欧美激情精品久久久久 | 韩日在线观看视频 | 成人影院在线视频 | 中文字幕一区二区三区精彩视频 | 亚洲综合一区二区三区 | 韩国精品在线 | 成人精品一区二区三区 | 日韩欧美专区 | 国产高清在线观看 | 亚洲午夜精品视频 | 日韩高清电影 | 鲁一鲁资源影视 | 精品视频在线观看 | cao在线| 成年网站在线观看 | 91xx在线观看 | 观看av| 免费国产一区 | 欧美午夜剧场 | 91小视频在线 | 久久久久免费 | 成人在线电影在线观看 | h视频在线免费 | 亚洲成人av| 91精品国产综合久久精品 | 色吊丝在线 | 久久成人一区二区三区 | av毛片免费 | 在线免费中文字幕 | 中文字幕精品一区二区三区精品 | 日韩成人免费视频 | 91.com在线观看 | 国产特级毛片 | 日韩精品在线视频免费观看 | 自拍偷拍中文字幕 |