成人免费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
相關推薦

2024-11-07 12:47:51

hook函數git

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技術棧公眾號

主站蜘蛛池模板: 午夜a区 | 国产精品视频在线观看 | 国产一区二区高清在线 | 国产精品综合视频 | 精品国产精品国产偷麻豆 | 久久国产精品免费一区二区三区 | 97国产精品视频人人做人人爱 | 一级毛片视频免费观看 | 欧美视频一区 | 午夜精| 成人免费视频久久 | 久久亚| av日韩在线播放 | 国产精品视频一区二区三区四区国 | 成人免费精品视频 | 国产一区视频在线 | 久久亚洲国产 | 欧美日韩国产免费 | 亚洲喷水 | 亚洲高清在线 | 视频在线一区二区 | 天天色综| 久久久久高清 | 精品日韩一区 | 亚洲免费av一区 | 日韩亚洲一区二区 | av在线成人 | 91精品久久久久久久久 | 日本亚洲精品成人欧美一区 | www.久草.com | 婷婷久久五月天 | 亚洲 欧美 另类 综合 偷拍 | 国产成人在线播放 | 精品欧美一区二区在线观看 | 色欧美片视频在线观看 | 欧美综合色 | 99精品视频免费观看 | 超碰成人av| 亚洲一区二区免费视频 | 精品久久一区 | 在线播放一区 |