vue3中的effectScope有什么作用,如何使用?如何自動清理

vue3中的effectScope有什么作用,如何使用?如何自動清理

vue3中的effectScope有什么作用,如何使用

    • 官網介紹:
    • 作用
    • 特點
    • 簡單示例:
    • 自動清理示例

官網介紹:

創建一個 effect 作用域,可以捕獲其中所創建的響應式副作用 (即計算屬性和偵聽器),這樣捕獲到的副作用可以一起處理。

作用

scope.run內可創建多個 像watchwatchEffect這種響應式函數,然后通過scope.stop()停止里面的所有響應式函數。

批量管理副作用: 可以把多個 effect 函數放到一個 effectScope 里,然后通過 effectScope.stop() 方法一次性停止所有這些副作用函數的運行。
組件卸載時清理副作用: 在組件卸載時,使用 effectScope 能夠更方便地清理所有相關的副作用,避免內存泄漏。
支持嵌套作用域

特點

  • Vue 3.2+ 新增的 API
  • 主要用于組織和批量管理 effect
  • 特別適合在組件 setup 中使用
  • 支持自動清理

簡單示例:

<script setup lang="ts">import { effectScope, reactive, watch, watchEffect } from 'vue';const scope = effectScope();const state = reactive({ count: 0 });scope.run(() => {// 這些 effect 都會被 scope 管理watch(() => state.count,(count) => {console.log('effectScope管理的watch監聽:', count);});watchEffect(() => {console.log('effectScope管理的watchEffect監聽', state.count);});});// 停止所有 effect,會將上面的watch和watchEffect都停止。const handleStop = () => {scope.stop();};// 自己調用watch監聽const singleWatch = watch(() => state.count,(count) => {console.log('單個監聽watch:', count);});// 停止自己創建的watch監聽const handleStopWatch = () => {singleWatch();};
</script><template><a-button @click="state.count++">count:{{ state.count }}</a-button><a-button @click="handleStop">停止</a-button><a-button @click="handleStopWatch">停止 watch</a-button>
</template><style scoped lang="less"></style>

自動清理示例

使用onScopeDispose實現組件卸載時自動,自動清理effectScope

import { effectScope, onScopeDispose } from 'vue'export default {setup() {const scope = effectScope()scope.run(() => {// 所有響應式邏輯const state = reactive({ /*...*/ })watch(/*...*/)computed(/*...*/)})onScopeDispose(() => {scope.stop() // 組件卸載時自動清理})return {}}
}

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

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

相關文章

搭建基于火災風險預測與防范的消防安全科普小程序

基于微信小程序的消防安全科普互動平臺的設計與實現&#xff0c;是關于微信小程序的&#xff0c;知識課程學習&#xff0c;包括學習后答題。 技術棧主要采用微信小程序云開發&#xff0c;有下面的模塊&#xff1a; 1.課程學習模塊 2.資訊模塊 3.答題模塊 4.我的模塊 還需…

python 與Redis操作整理

以下是使用 Python 操作 Redis 的完整整理&#xff0c;涵蓋基礎操作、高級功能及最佳實踐&#xff1a; 1. 安裝與連接 (1) 安裝庫 pip install redis(2) 基礎連接 import redis# 創建連接池&#xff08;推薦復用連接&#xff09; pool redis.ConnectionPool(hostlocalhost, …

什么時候使用Python 虛擬環境(venv)而不用conda

是的&#xff01;python3.9 -m venv rtdetr_env 是 Python 原生的虛擬環境&#xff08;venv&#xff09;&#xff0c;而 conda 是另一個流行的虛擬環境管理工具&#xff08;來自 Anaconda/Miniconda&#xff09;。下面我會詳細對比兩者的區別&#xff0c;并講解 venv 的基本用法…

ubuntu20.04安裝x11vnc遠程桌面

x11vnc是一個VNC服務器, 安裝后我們可以不依賴外部的顯示設備, 通過網絡遠程登錄ubuntu桌面。 安裝x11vnc sudo apt-get install x11vnc 設置VNC登錄密碼 sudo x11vnc -storepasswd /etc/x11vnc.pwd 設置x11vnc在開機時自動啟動 新建如下文件: sudo vi /lib/systemd/sys…

Maven的概念與初識Maven

目錄 一、Maven的概念 1. 什么是Maven 2. 項目構建&#xff1a;從代碼到部署的標準化流程 2.1 Maven構建生命周期 2.2 傳統構建 vs Maven構建 3. 依賴管理&#xff1a;解決“JAR地獄”的利器 3.1 依賴聲明 3.2 依賴傳遞與沖突解決 4. Maven倉庫&#xff1a;依賴的存儲…

Unity-Shader詳解-其二

前向渲染和延遲渲染 前向渲染和延遲渲染總的來說是我們的兩種主要的渲染方式。 我們在Unity的Project Settings中的Graphic界面能夠找到渲染隊列的設定&#xff1a; 我們也可以在Main Camera這里進行設置&#xff1a; 那這里我們首先介紹一下兩種渲染&#xff08;Forward R…

C++ 中 std::tuple 使用詳解

C 中 std::tuple 使用詳解 基本概念 std::tuple 是 C11 引入的模板類&#xff0c;用于打包任意數量、任意類型的值在一起。可看作是類型安全的變長結構體。 #include <tuple>std::tuple<int, std::string, double> t(42, "hello", 3.14);創建 tuple 的…

WebRTC基于網頁的視頻會議,手寫WebRTC流程(html)

WebRTC是web real-time communication網頁及時通信的縮寫&#xff0c;通過javascript就可以實現網頁會話&#xff0c;基于瀏覽器開發出來多媒體應用&#xff0c; 以下是手寫的WEBRTC調用本地攝像頭的html代碼&#xff0c;直接用瀏覽器打開&#xff0c;就可以使用 <!DOCTYPE…

MyBatis 官方子項目詳細說明及表格總結

MyBatis 官方子項目詳細說明及表格總結 1. 核心子項目說明 1.1 mybatis-3 GitHub 鏈接&#xff1a;https://github.com/mybatis/mybatis-3功能&#xff1a; MyBatis 核心框架的源碼&#xff0c;提供 SQL 映射、動態 SQL、緩存、事務管理等核心功能。主要功能&#xff1a; 支持…

【虛幻C++筆記】碰撞檢測

目錄 碰撞檢測參數詳情示例用法 碰撞檢測 顯示名稱中文名稱CSphere Trace By Channel按通道進行球體追蹤UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件進行球體追蹤UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects針…

推論階梯——AI與思維模型【81】

一、定義 推論階梯思維模型是一種用于分析和理解人們如何從觀察到的事實,經過一系列的假設、推理和判斷,最終得出結論的思維過程的理論框架。它將這個過程比喻為一個階梯,每一步都建立在前一步的基礎上,逐漸形成一個完整的推論。這個模型幫助我們意識到在思考和決策過程中…

小剛說C語言刷題——1109加密四位數

1.題目描述 某軍事單位用 4位整數來傳遞信息&#xff0c;傳遞之前要求先對這個 4 位數進行加密。加密的方式是每一位都先加上 5然后對 10取余數&#xff0c;再將得到的新數顛倒過來。 例如&#xff1a;原數是 1379 &#xff0c;那么每位加 55對 10 取余數的結果為 6824 &…

云服務器和獨立服務器的區別在哪

在當今數字化的時代&#xff0c;服務器成為了支撐各種業務和應用的重要基石。而在服務器的領域中&#xff0c;云服務器和獨立服務器是兩個備受關注的選項。那么&#xff0c;它們到底有何區別呢&#xff1f; 首先&#xff0c;讓我們來聊聊成本。云服務器通常采用按需付費的模式…

【前端】【業務場景】【面試】在前端開發中,如何優化 SVG(可縮放矢量圖形)的性能,特別是在處理復雜圖形和動畫時

SVG?性能優化&#xff1a;循序漸進 4?步法 目標&#xff1a;先減負 → 再復用 → 后加速 → 最后按場景微調 ①?精簡—把包袱先丟掉 刪除無用元素 隱藏/被遮擋的 <path>、未引用的 <defs> 里漸變、濾鏡。 合并路徑 同填充色或描邊的路徑 ? SVGO / SVGOMG「Mer…

MySQL長事務的隱患:深入剖析與解決方案

MySQL長事務的隱患&#xff1a;深入剖析與解決方案 一、什么是長事務&#xff1f; 在數據庫系統中&#xff0c;長事務(Long Transaction)通常指執行時間超過預期或系統設定閾值的事務。對于MySQL而言&#xff0c;雖然沒有嚴格的時間定義&#xff0c;但一般認為執行時間超過數…

華為AR1200 telnet設置

華為路由配置TELNET登 &#x1f4fa; 啟動TELNET服務 在華為路由器上啟動TELNET服務&#xff0c;執行以下命令&#xff1a; telnet server enable &#x1f511; 配置AAA認證 進入AAA認證配置&#xff0c;創建一個路由器登錄帳號admin123&#xff0c;并設置密碼為huawei123&…

【Token系列】01 | Token不是詞:GPT如何切分語言的最小單元

文章目錄 01 | Token不是詞&#xff1a;GPT如何切分語言的最小單元&#xff1f;一、什么是 Token&#xff1f;二、Token 是怎么來的&#xff1f;——BPE算法原理BPE核心步驟&#xff1a; 三、為什么不直接用詞或字符&#xff1f;四、Token切分的實際影響五、中文Token的特殊性六…

如何快速高效學習Python?

如何快速高效學習Python&#xff1f; How to Fastly and Effectively Learn Python Programming? By JacksonML 1. Python年輕嗎&#xff1f; Python自1991年誕生到現在&#xff0c;已經經歷了三十四年或者更長時間了。畢竟&#xff0c;Python之父 – 吉多范羅蘇姆先生(Gu…

NAT穿透

NAT是 Net Address Traslation的縮寫&#xff0c;即網絡地址轉換 NAT部署在網絡出口的位置。位于內網和公網之間&#xff0c;是連接內挖個主機和公網的橋梁&#xff0c;雙向流量都必須經過NAT&#xff0c;裝有NAT軟件的路由器叫NAT路由器&#xff0c;NAT路由器擁有公網Ip NAT解…

搜索引擎的高級語法

文章目錄 精確搜索&#xff1a;雙引號站內搜索&#xff1a;site通配符搜索&#xff1a;*減號縮小范圍&#xff1a;-文檔搜索&#xff1a;filetypeURL搜索&#xff1a; inurl標題搜索&#xff1a;intitle正文搜索&#xff1a;intext參考鏈接 精確搜索&#xff1a;雙引號 “ ” …