vue3提供的hook和通常的函數有什么區別

Vue 3 提供的 hook(組合式函數) 和普通函數在使用場景、功能和設計目的上有明顯區別,它們是 Vue 3 組合式 API 的核心概念。下面從幾個關鍵維度分析它們的差異:

1. 設計目的不同

  • Hook(組合式函數)

    • 專為 Vue 組件設計,用于封裝和復用有狀態的邏輯(如響應式數據、生命周期鉤子、DOM 操作等)。
    • 可以在組件間共享邏輯,同時保持響應式特性和生命周期的關聯。
    • 例如:useStateuseEffectuseRouter 等。
  • 普通函數

    • 通用工具函數,不依賴 Vue 的響應式系統或生命周期,用于執行無狀態的計算或操作。
    • 例如:格式化日期、計算數學表達式、處理數組等。

2. 響應式能力不同

  • Hook

    • 可以創建和管理 響應式數據(如 refreactive),并在數據變化時觸發組件更新。
    • 示例:
      import { ref, onMounted } from 'vue';function useCounter() {const count = ref(0);const increment = () => count.value++;onMounted(() => {console.log('計數器已掛載');});return { count, increment };
      }
      
  • 普通函數

    • 無法直接創建響應式數據,返回的結果通常是靜態值或普通對象。
    • 示例:
      function formatCurrency(amount) {return `${amount.toFixed(2)}`;
      }
      

3. 生命周期關聯不同

  • Hook

    • 可以使用 Vue 的 生命周期鉤子(如 onMountedonUnmounted),在特定階段執行副作用。
    • 示例:在組件掛載時自動獲取數據。
  • 普通函數

    • 沒有生命周期概念,無法感知組件的掛載、更新或卸載。

4. 調用時機限制不同

  • Hook

    • 必須在 組件的 setup() 函數或其他 Hook 內部調用,且不能在條件語句、循環或嵌套函數中調用(需遵循 Hook 調用規則)。
    • 這是為了確保 Vue 能正確追蹤依賴關系。
  • 普通函數

    • 可以在任何地方調用,沒有特殊限制。

5. 狀態管理方式不同

  • Hook

    • 可以封裝和管理組件的 內部狀態,并通過返回值暴露給組件使用。
    • 示例:
      function useMousePosition() {const x = ref(0);const y = ref(0);const updatePosition = (e) => {x.value = e.pageX;y.value = e.pageY;};onMounted(() => window.addEventListener('mousemove', updatePosition));onUnmounted(() => window.removeEventListener('mousemove', updatePosition));return { x, y };
      }
      
  • 普通函數

    • 不管理狀態,僅提供計算或操作能力。

6. 依賴注入方式不同

  • Hook

    • 可以通過 inject 獲取 依賴注入(如 provide 提供的上下文)。
  • 普通函數

    • 通常需要通過參數顯式傳遞依賴。

何時使用 Hook 或普通函數?

  • 使用 Hook

    • 需要封裝響應式數據、生命周期邏輯或 DOM 操作。
    • 需要在多個組件間復用有狀態的邏輯。
    • 需要訪問 Vue 的 API(如 watchcomputed)。
  • 使用普通函數

    • 執行純計算或無狀態操作(如工具函數)。
    • 不依賴 Vue 的響應式系統或生命周期。

總結

Hook 是 Vue 3 組合式 API 的核心,通過 組合多個有狀態的邏輯 來替代 Vue 2 的選項式 API(datamethodswatch 等),使代碼更模塊化、可復用。而普通函數則作為輔助工具,處理無狀態的通用邏輯。兩者結合使用,可以構建更清晰、更易于維護的 Vue 應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84580.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spark提交流程

bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn ./examples/jars/spark-examples_2.12-3.3.1.jar 10 這一句命令實際上是 啟動一個Java程序 java org.apache.spark.deploy.SparkSubmit 并將命令行參數解析到這個類的對應屬性上 因為master給…

Microsoft Copilot Studio - 嘗試一下Agent

1.簡單介紹 Microsoft Copilot Studio以前的名字是Power Virtual Agent(簡稱PVA)。Power Virutal Agent是2019年出現的,是低代碼平臺Power Platform的一部分。當時Generative AI還沒有出現,但是基于已有的Conversation AI技術,即Microsoft L…

【源碼剖析】2-搭建kafka源碼環境

在上篇文章kafka核心概念中,解釋了kafka的核心概念,下面開始進行kafka源碼編譯。為什么學習源碼需要進行源碼編譯呢,我認為主要有兩點: 可以進行debug,跟蹤代碼執行邏輯可以對源碼改動,強化學習學習效果 …

小紅書視頻圖文提取:采集+CV的實戰手記

項目說明:這波視頻,值不值得采? 你有沒有遇到過這樣的場景?老板說:“我們得看看最近小紅書上關于‘旅行’的視頻都說了些什么。”團隊做數據分析的,立馬傻眼:官網打不開、接口抓不著、視頻不能…

Cloudflare 從 Nginx 到 Pingora:性能、效率與安全的全面升級

在互聯網的快速發展中,高性能、高效率和高安全性的網絡服務成為了各大互聯網基礎設施提供商的核心追求。Cloudflare 作為全球領先的互聯網安全和基礎設施公司,近期做出了一個重大技術決策:棄用長期使用的 Nginx,轉而采用其內部開發…

從編輯到安全設置: 如何滿足專業文檔PDF處理需求

隨著數字化辦公的發展,PDF 已成為跨平臺文檔交互的標準格式。無論是在日常辦公、學術研究,還是項目協作中,對 PDF 文件進行高效編輯與管理的需求日益增長。功能全面、操作流暢且無額外負擔的 PDF 編輯工具,它是一款在功能上可與 A…

Kafka消費者組位移重設指南

#作者:張桐瑞 文章目錄 一、Kafka 與傳統消息引擎的核心差異二、重設消費者組位移的核心原因三、重設位移的兩大維度與七種策略四、重設位移的實現方式(一)Java API 方式(二)命令行腳本方式(Kafka 0.11&am…

分類模型:邏輯回歸

1、針對設計:二分類 Logistic 回歸最初是為二分類問題設計的, Logistic 回歸基于概率,通過 Sigmoid 函數轉換輸入特征的線性組合,將任意實數映射到 [0, 1] 區間內。 通過引入一個決策規則(通常是概率的閾值&#xff…

CppCon 2015 學習:C++ WAT

這段代碼展示了 C 中的一些有趣和令人困惑的特性,尤其是涉及數組訪問和某些語法的巧妙之處。讓我們逐個分析: 1. assert(map[“Hello world!”] e;) 這一行看起來很不尋常,因為 map 在這里被用作數組下標訪問器,但是在前面沒有…

vscode自定義主題語法及流程

vscode c/c 主題 DIY 啟用自己的主題(最后步驟) 重啟生效 文件–>首選項–>主題–>顏色主題: 也可以在插件里找到哈 手把手教你制作 在C:\Users\jlh.vscode\extensions下自己創建一個文件夾 里面有兩個文件和一個文件夾 具體內容: package.json: {"name&…

前端傳遞日期范圍(開始時間和結束時間),后端解析及查詢

前端技術&#xff1a;Vue3 TypeScript Element Plus 后端技術&#xff1a;Java Spring Boot MyBatis 應用效果&#xff1a; 原來方案 1、前端日期控件使用 el-date-picker&#xff0c;日期顯示格式和日期值返回格式都為&#xff1a;YYYY-MM-DD <el-form :model"…

零基礎設計模式——行為型模式 - 命令模式

第四部分&#xff1a;行為型模式 - 命令模式 (Command Pattern) 接下來&#xff0c;我們學習行為型模式中的命令模式。這個模式能將“請求”封裝成一個對象&#xff0c;從而讓你能夠參數化客戶端對象&#xff0c;將請求排隊或記錄請求日志&#xff0c;以及支持可撤銷的操作。 …

禁止 Windows 更新后自動重啟

Windows 默認會在安裝重要更新后自動重啟&#xff0c;但你可以調整設置來避免這種情況&#xff1a; ??方法 1&#xff1a;通過組策略&#xff08;適用于 Windows 專業版/企業版&#xff09;?? 按 Win R&#xff0c;輸入 gpedit.msc 打開 ??本地組策略編輯器??。導航…

GoldenDB簡述

GoldenDB是國產的分布式數據庫。它徹底解決了事務一致性&#xff0c;數據實時一致性的問題。采用的是Shared Nothing&#xff08;分片式存儲&#xff09;的分布式架構。就是不共享數據&#xff0c;各自節點持有各自的數據。對比不共享的&#xff0c;還有其他兩種分布式架構&…

訓練過程中的 Loss ?

文章目錄 在我們訓練的過程中&#xff0c;設置好這個epochs也就是訓練的輪次&#xff0c;然后計算這個損失函數&#xff0c;我們可以知道這個具體的訓練的情況&#xff0c;那么在訓練的過程中&#xff0c;這個損失函數的變化有哪些情況&#xff1f;對應的一個解釋情況是怎么樣的…

S2B2B農產品供應鏈交易多平臺開發有哪些發展前景?如何維護?

一、S2B2B農產品供應鏈交易多平臺開發的未來發展前景 本文將由小編為您介紹關于S2B2B農產品供應鏈交易多平臺開發的內容&#xff0c;希望能夠幫助大家。在數字化時代&#xff0c;農產品供應鏈的數字化轉型成為了一種必然趨勢。S2B2B(Supplier to Business to Business)模式通過…

關于有害的過度使用 std::move

翻譯&#xff1a;2023 11 月 24 日On harmful overuse of std::move cppreference std::move 論 std::move 的有害過度使用 - The Old New Thing C 的 std::move 函數將其參數轉換為右值引用&#xff0c;這使得其內容可以被另一個操作“消費”&#xff08;移動&#xff09;。…

Ubuntu24.04 onnx 模型轉 rknn

前面的環境配置有點懶得寫&#xff0c;教程也很多&#xff0c;可以自己找 rknn-toolkit2 gitee 地址&#xff1a;pingli/rknn-toolkit2 試了很多開源的代碼&#xff0c;都沒辦法跑通&#xff0c; 最后自己改了一版 微調后的 qwen2 模型適用 from rknn.api import RKNN impor…

Electron通信流程

前言 今天講Electron框架的通信流程&#xff0c;首先我們需要知道為什么需要通信。這得益于Electron的多進程模型&#xff0c;它主要模仿chrome的多進程模型如下圖&#xff1a; 作為應用開發者&#xff0c;我們將控制兩種類型的進程&#xff1a;主進程和渲染器進程 。 …

uni-app項目實戰筆記1--創建項目和實現首頁輪播圖功能

ps:本筆記來自B站咸蝦米壁紙項目 一.創建項目&#xff0c;完成項目初始化搭建 1.在HBuilder X創建wallper項目&#xff0c;使用默認模塊&#xff0c;選擇vue&#xff1b; 2.在項目根目錄下創建common目錄&#xff0c;用于存放靜態資源&#xff0c;創建項目時自動生成static目…