欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文搞懂Vue3中watchEffect偵聽器的使用

 更新時(shí)間:2022年07月09日 08:19:03   作者:ed。  
今天我們來學(xué)習(xí)一下watch偵聽器的好兄弟?watchEffect?偵聽器。這個(gè)相對來說比較簡單,用的不是很多,當(dāng)然了,根據(jù)自己的項(xiàng)目情況自行決定使用,希望對大家有所幫助

上一節(jié)我們學(xué)習(xí)了 watch 偵聽器的基礎(chǔ)用法,用來監(jiān)聽頁面數(shù)據(jù)的變化,那么今天呢,我們來學(xué)習(xí)一下 watch 偵聽器的好兄弟 watchEffect 偵聽器。這個(gè)相對來說比較簡單,用的不是很多,當(dāng)然了,根據(jù)自己的項(xiàng)目情況自行決定使用。這個(gè)就不詳細(xì)說了,簡單過一下子。

watchEffect 偵聽器

其實(shí)我覺得這個(gè)玩意兒哈,不用也罷,啊哈哈哈哈哈!

怎么說呢,你可以理解成 watch 和 watchEffect 這兩個(gè)玩意兒的功能是一樣的。

watch:顯示指定依賴源,依賴源更新時(shí)執(zhí)行回調(diào)函數(shù)。
watchEffect:自動收集依賴源,依賴源更新時(shí)候重新執(zhí)行自身。

  • watchEffect 如果存在的話,組件初始化的時(shí)候就會自動自行一次,不需要像 watch 一樣設(shè)置立即執(zhí)行。
  • watch 每次回調(diào)之后是可以獲取到最新值和上一次的老值,但是 watchEffect 是拿不到的。
  • watchEffect 不需要指定監(jiān)聽的屬性,他會自動進(jìn)行依賴收集,只要我們回調(diào)中使用了響應(yīng)式的屬性,那么這些屬性在變更之后這個(gè)回調(diào)都會執(zhí)行,不像 watch 只能監(jiān)聽指定的屬性。
  • 使用的時(shí)候也是需要引入。
  • 記住一點(diǎn)哈, watch 可以代替 watchEffect,但是 watchEffect 不能替代 watch。

總結(jié):能用 watch 就不要用 watchEffect。

watchEffect 偵聽器使用

首先我們寫一個(gè)簡單的 watchEffect 偵聽器。

<template>
  <div>
    <h1>{{name}}</h1>
    <button @click="btn">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect } from "vue";
export default {
  name: "App",
  setup() {
    const name = ref("我是????.");

    function btn() {
      name.value = "????.";
    }

    const res = watchEffect(() => {
      console.log("watchEffect 執(zhí)行了");
    });

    return { name, btn };
  }
};
</script>

記住 watchEffect 使用也是需要先引入的,不然不好使哈,然后我們保存上面的代碼,然后刷新頁面看一下執(zhí)行結(jié)果。

我們發(fā)現(xiàn)哈,我們一刷新頁面,控制臺直接打印了我們輸出的內(nèi)容,所以說呢,watchEffect 組件一加載完就會執(zhí)行。

watchEffect 監(jiān)聽基本數(shù)據(jù)

我們看到,watchEffect 使用的時(shí)候并沒有設(shè)置監(jiān)聽哪個(gè)參數(shù),只有一個(gè)回調(diào)函數(shù),因?yàn)樗麜詣舆M(jìn)行依賴收集,只要我們回調(diào)中使用了響應(yīng)式的屬性,那么這些屬性在變更之后這個(gè)回調(diào)都會執(zhí)行。

比如我們監(jiān)聽 name 的情況。

<template>
  <div>
    <h1>{{name}}</h1>
    <button @click="btn">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect } from "vue";
export default {
  name: "App",
  setup() {
    const name = ref("我是????.");

    function btn() {
      name.value = "????.";
    }

    const res = watchEffect(() => {
      console.log(name.value);
    });

    return { name, btn };
  }
};
</script>

我們在回調(diào)函數(shù)打印一下 name 的值。

watchEffect 監(jiān)聽復(fù)雜數(shù)據(jù)

上面的案例是用來監(jiān)聽一個(gè)基本數(shù)據(jù),如果監(jiān)聽一個(gè)對象呢?

其實(shí)也是一樣的哈。

<template>
  <div>
    <h1>{{boy.age}}</h1>
    <button @click="boy.age++">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect, reactive } from "vue";
export default {
  name: "App",
  setup() {
    const boy = reactive({
      name: "我是????.",
      age: 10
    });

    const res = watchEffect(() => {
      console.log(boy.age);
    });

    return { boy };
  }
};
</script>

上邊代碼呢,一個(gè)按鈕,每次點(diǎn)擊讓 boy 對象里面的 age 加一操作,然后監(jiān)聽一下 age 的新值

可以看到是完全沒有問題的哈!

watchEffect 啥時(shí)候執(zhí)行

上邊說過了哈,只要我們回調(diào)中使用了響應(yīng)式的屬性,那么這些屬性在變更之后這個(gè)回調(diào)都會執(zhí)行,不像 watch 只能監(jiān)聽指定的屬性。

啥意思呢,簡單理解一下,就是回調(diào)里面使用了的話他就執(zhí)行,沒用他就不執(zhí)行。

就像上面的案例,修改 age 的時(shí)候,我們在回調(diào)里面打印了 age,在回調(diào)里面涉及到 age 了,他就會執(zhí)行,如果我們這次不使用改變的 age,只打印一句話,看一下能不能執(zhí)行回調(diào)哈。

<template>
  <div>
    <h1>{{boy.age}}</h1>
    <button @click="boy.age++">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect, reactive } from "vue";
export default {
  name: "App",
  setup() {
    const boy = reactive({
      name: "我是????.",
      age: 10
    });

    const res = watchEffect(() => {
      console.log("執(zhí)行了");
    });

    return { boy };
  }
};
</script>

刷新保存,點(diǎn)擊按鈕修改 age 的值,看一下控制臺有沒有打印 執(zhí)行了 三個(gè)字。

明白那句話了嗎?知道什么時(shí)候執(zhí)行了吧? OK。

關(guān)閉 watchEffect 監(jiān)聽

假設(shè),我們開始使用了 watchEffect 監(jiān)聽,但是我現(xiàn)在不想讓他監(jiān)聽了怎么辦呢?其實(shí)超級簡單。

    const res = watchEffect(() => {
      console.log(boy.age);
    });

上邊我們不是創(chuàng)建一個(gè) watchEffect 偵聽器了嗎?關(guān)閉只需要調(diào)用一下就關(guān)了哈。

res()  // 關(guān)閉

下面看具體代碼。

<template>
  <div>
    <h1>{{boy.age}}</h1>
    <button @click="boy.age++">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect, reactive } from "vue";
export default {
  name: "App",
  setup() {
    const boy = reactive({
      name: "我是????.",
      age: 10
    });

    const res = watchEffect(() => {
      console.log(boy.age);
    });

    res()  // 關(guān)閉監(jiān)聽

    return { boy };
  }
};
</script>

保存一下,點(diǎn)擊按鈕看效果。

好了,watchEffect 偵聽器基本有法就這樣了,沒什么難的,所以說很多人都說,哎喲,這個(gè) watchEffect 沒什么屁用??!確實(shí)用處不大,但是也不絕對哈,不然作者就不至于在 watch 之外有整一個(gè) watchEffect 了是吧! 但是具體什么用,等你做項(xiàng)目過程中,就知道了!但是,能用 watch 解決的,就不要用 watchEffect !

到此這篇關(guān)于一文搞懂Vue3中watchEffect偵聽器的使用的文章就介紹到這了,更多相關(guān)Vue3 watchEffect偵聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3?TypeScript?實(shí)現(xiàn)useRequest詳情

    Vue3?TypeScript?實(shí)現(xiàn)useRequest詳情

    本文介紹了Vue3?TypeScript實(shí)現(xiàn)useRequest詳情,useRequest可能是目前社區(qū)中最強(qiáng)大,最接地氣的請求類?Hooks了。可以覆蓋99%的網(wǎng)絡(luò)請求場景,無論是讀還是寫,無論是普通請求還是分頁請求,無論是緩存還是防抖節(jié)流,通通都能支持,關(guān)于其介紹需要的小伙伴可以參考一下
    2022-05-05
  • vue.config.js完整配置教程

    vue.config.js完整配置教程

    這篇文章主要為大家介紹了vue.config.js的完整配置教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • vue3-print-nb實(shí)現(xiàn)頁面打印(含分頁打印)示例代碼

    vue3-print-nb實(shí)現(xiàn)頁面打印(含分頁打印)示例代碼

    大多數(shù)后臺系統(tǒng)中都存在打印的需求,在有打印需求時(shí),對前端來說當(dāng)然是直接打印頁面更容易,下面這篇文章主要給大家介紹了關(guān)于vue3-print-nb實(shí)現(xiàn)頁面打印(含分頁打印)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 在Vue3中實(shí)現(xiàn)拖拽文件上傳功能的過程詳解

    在Vue3中實(shí)現(xiàn)拖拽文件上傳功能的過程詳解

    文件上傳是我們在開發(fā)Web應(yīng)用時(shí)經(jīng)常遇到的功能之一,為了提升用戶體驗(yàn),我們可以利用HTML5的拖放API來實(shí)現(xiàn)拖拽文件上傳的功能,本文將介紹如何在Vue3中實(shí)現(xiàn)這一功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • uniapp前端實(shí)現(xiàn)微信支付功能全過程(小程序、公眾號H5、app)

    uniapp前端實(shí)現(xiàn)微信支付功能全過程(小程序、公眾號H5、app)

    這篇文章主要介紹了uniapp前端實(shí)現(xiàn)微信支付功能的相關(guān)資料,通過uniapp開發(fā)跨平臺應(yīng)用時(shí),需要處理不同平臺的支付方式,包括微信小程序支付、公眾號H5支付和App支付,需要的朋友可以參考下
    2024-09-09
  • element-plus的el-tree的雙向綁定示例代碼

    element-plus的el-tree的雙向綁定示例代碼

    這篇文章主要介紹了element-plus的el-tree的雙向綁定的示例代碼,代碼簡單易懂,結(jié)合圖文給大家展示,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • vue內(nèi)置指令詳解

    vue內(nèi)置指令詳解

    指令是Vue模板中最常用的一項(xiàng)功能,它帶有前綴v-,主要職責(zé)是當(dāng)其表達(dá)式的值改變時(shí),相應(yīng)的將某些行為應(yīng)用在 DOM 上。這篇文章主要介紹了vue內(nèi)置指令詳解,需要的朋友可以參考下
    2018-04-04
  • Vue Router 配合 keep-alive 不生效的問題及解決方案

    Vue Router 配合 keep-alive 不生效的問題及解決方案

    我在 app.vue 中使用了 router-view 標(biāo)簽,來展示 layout 和其他一級路由,然后在 layout 下的 main 區(qū)域使用了一個(gè) router-view 來展示通過菜單欄切換的子路由,下面給大家介紹Vue Router 配合 keep-alive 不生效的問題及解決方案,感興趣的朋友一起看看吧
    2024-01-01
  • iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能

    iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 詳解如何在Vue3中實(shí)現(xiàn)懶加載組件

    詳解如何在Vue3中實(shí)現(xiàn)懶加載組件

    隨著現(xiàn)代前端框架的發(fā)展,懶加載作為一種優(yōu)秀的性能優(yōu)化技術(shù),在用戶體驗(yàn)和加載速度上扮演著越來越重要的角色,本文將詳細(xì)介紹如何在 Vue 3 中實(shí)現(xiàn)懶加載組件,確保你能夠?qū)⑦@一技術(shù)應(yīng)用到自己的項(xiàng)目中,需要的朋友可以參考下
    2024-11-11

最新評論