国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

這篇具有很好參考價(jià)值的文章主要介紹了【vue3】關(guān)于watch與computed的用法看這個(gè)就ok。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

??博主:初映CY的前說(前端領(lǐng)域) ,??本文核心:watch()與computed的使用【vue2中watch|computed概念詳解】,本文將介紹在vue3中怎么使用這兩者技能

【前言】vue2當(dāng)中有這兩個(gè)技能,那么vue3中的watch與computed是怎么用呢?

?一、watch

1.檢測(cè)reactive內(nèi)部數(shù)據(jù)

<template>
  <p>{{ obj.hobby.eat }}</p>
  <button @click="obj.hobby.eat = '面條'">click</button>
</template>

<script>
  import { watch, reactive } from 'vue'
  export default {
      name: 'App',
      setup() {
          const obj = reactive({
              name: 'ifer',
              hobby: {
                  eat: '西瓜',
              },
          })
          watch(obj, (newValue, oldValue) => {
              // 注意1:監(jiān)聽對(duì)象的時(shí)候,新舊值是相等的
              // 注意2:強(qiáng)制開啟深度監(jiān)聽,配置無效
              console.log('觸發(fā)監(jiān)聽');
              console.log(newValue === oldValue) // true
          })

          return { obj }
      },
  }
</script>

注意點(diǎn):對(duì) reactive 自身的修改則不會(huì)觸發(fā)監(jiān)聽。

<template>
    <p>{{ obj.hobby.eat }}</p>
    <button @click="obj.hobby = { eat: '面條' }">click</button>
</template>

<script>
    import { watch, reactive } from 'vue'
    export default {
        name: 'App',
        setup() {
            const obj = reactive({
                name: 'ifer',
                hobby: {
                    eat: '西瓜',
                },
            })
            watch(obj.hobby, (newValue, oldValue) => {
                // obj.hobby = { eat: '面條' }
                console.log('對(duì) reactive 自身的修改不會(huì)觸發(fā)監(jiān)聽')
            })
            return { obj }
        },
    }
</script>

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

一定得注意不能修改reactive本身,修改本身不觸發(fā)

2.監(jiān)聽 ref 數(shù)據(jù)

  • 2.1監(jiān)聽一個(gè) ref 數(shù)據(jù)
<template>
  <p>{{ age }}</p>
  <button @click="age++">click</button>
</template>

<script>
  import { watch, ref } from 'vue'
  export default {
      name: 'App',
      setup() {
          const age = ref(18)
          // 監(jiān)聽 ref 數(shù)據(jù) age,會(huì)觸發(fā)后面的回調(diào),不需要 .value
          watch(age, (newValue, oldValue) => {
              console.log(newValue, oldValue)
          })

          return { age }
      },
  }
</script>
  • 2.2監(jiān)聽多個(gè) ref 數(shù)據(jù)

可以通過數(shù)組的形式,同時(shí)監(jiān)聽 age 和 num 的變化。

<template>
    <p>age: {{ age }} num: {{ num }}</p>
    <button @click="handleClick">click</button>
</template>

<script>
    import { watch, ref } from 'vue'
    export default {
        name: 'App',
        setup() {
            const age = ref(18)
            const num = ref(0)

            const handleClick = () => {
                age.value++
                num.value++
            }
            // 數(shù)組里面是 ref 數(shù)據(jù)
            watch([age, num], (newValue, oldValue) => {
                console.log(newValue, oldValue)
            })

            return { age, num, handleClick }
        },
    }
</script>

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

立即觸發(fā)監(jiān)聽屬性:

                {
                    immediate: true,
                }
<template>
    <p>{{ age }}</p>
    <button @click="handleClick">click</button>
</template>

<script>
    import { watch, ref } from 'vue'
    export default {
        name: 'App',
        setup() {
            const age = ref(18)

            const handleClick = () => {
                age.value++
            }

            watch(
                age,
                (newValue, oldValue) => {
                    console.log(newValue, oldValue) // 18 undefined
                },
                {
                    immediate: true,
                }
            )

            return { age, handleClick }
        },
    }
</script>

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

開啟深度監(jiān)聽 ref 數(shù)據(jù)

?? 問題:修改 ref 對(duì)象里面的數(shù)據(jù)并不會(huì)觸發(fā)監(jiān)聽,說明 ref 并不是默認(rèn)開啟 deep 的。見下
<template>
    <p>{{ obj.hobby.eat }}</p>
    <button @click="obj.hobby.eat = '面條'">修改 obj.hobby.eat</button>
</template>

<script>
    import { watch, ref } from 'vue'
    export default {
        name: 'App',
        setup() {
            const obj = ref({
                hobby: {
                    eat: '西瓜',
                },
            })
            // 注意:ref 監(jiān)聽對(duì)象,默認(rèn)監(jiān)聽的是這個(gè)對(duì)象地址的變化
            watch(obj, (newValue, oldValue) => {
                console.log(newValue === oldValue)
            })

            return { obj }
        },
    }
</script>

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok
面對(duì)這樣的沒有觸發(fā)watch我們解決辦法有三個(gè):

  • 解決 1:當(dāng)然直接修改整個(gè)對(duì)象的話肯定是會(huì)被監(jiān)聽到的(注意模板中對(duì) obj 的修改,相當(dāng)于修改的是 obj.value)。
    -`

    {{ obj.hobby.eat }}

`

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

  • 解決 2:開啟深度監(jiān)聽 ref 數(shù)據(jù)。
watch(
    obj,
    (newValue, oldValue) => {
        console.log(newValue, oldValue)
        console.log(newValue === oldValue)
    },
    {
        deep: true,
    }
)

就加上一句話,故此沒有截圖

  • 解決 3:還可以通過監(jiān)聽 ref.value 來實(shí)現(xiàn)同樣的效果。

因?yàn)?ref 內(nèi)部如果包裹對(duì)象的話,其實(shí)還是借助 reactive 實(shí)現(xiàn)的,可以通過 isReactive 方法來證明。

<template>
    <p>{{ obj.hobby.eat }}</p>
    <button @click="obj.hobby.eat = '面條'">修改 obj</button>
</template>

<script>
    import { watch, ref } from 'vue'
    export default {
        name: 'App',
        setup() {
            const obj = ref({
                hobby: {
                    eat: '西瓜',
                },
            })
            watch(obj.value, (newValue, oldValue) => {
                console.log(newValue, oldValue)
                console.log(newValue === oldValue)
            })

            return { obj }
        },
    }
</script>

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

  • 監(jiān)聽普通數(shù)據(jù)
    監(jiān)聽響應(yīng)式對(duì)象中的某一個(gè)普通屬性值,要通過函數(shù)返回的方式進(jìn)行(如果返回的是對(duì)象/響應(yīng)式對(duì)象,修改內(nèi)部的數(shù)據(jù)需要開啟深度監(jiān)聽)。
<template>
    <p>{{ obj.hobby.eat }}</p>
    <button @click="obj.hobby.eat = '面條'">修改 obj</button>
</template>

<script>
    import { watch, reactive } from 'vue'
    export default {
        name: 'App',
        setup() {
            const obj = reactive({
                hobby: {
                    eat: '西瓜',
                },
            })
            // 把 obj.hobby 作為普通值去進(jìn)行監(jiān)聽,只能監(jiān)聽到 obj.hobby 自身的變化
            /* watch(
      () => obj.hobby,
      (newValue, oldValue) => {
        console.log(newValue, oldValue)
        console.log(newValue === oldValue)
      }
    ) */
            // 如果開啟了深度監(jiān)聽,則能監(jiān)聽到 obj.hobby 和內(nèi)部數(shù)據(jù)的所有變化
            /* watch(
      () => obj.hobby,
      (newValue, oldValue) => {
        console.log(newValue, oldValue)
        console.log(newValue === oldValue)
      },
      {
        deep: true,
      }
    ) */
            // 能監(jiān)聽影響到 obj.hobby.eat 變化的操作,例如 obj.hobby = { eat: '面條' } 或 obj.hobby.eat = '面條',如果是 reactive 直接對(duì) obj 的修改則不會(huì)被監(jiān)聽到(ref 可以)
            watch(
                () => obj.hobby.eat,
                (newValue, oldValue) => {
                    console.log(newValue, oldValue)
                    console.log(newValue === oldValue)
                }
            )
            return { obj }
        },
    }
</script>

?二、computed

作用:computed 函數(shù)用來定義計(jì)算屬性,上述的基礎(chǔ)概念都是同vue2一樣的,關(guān)于vue2中這兩個(gè)知識(shí)點(diǎn)的定義大家可以移步:【vue2】計(jì)算與偵聽的用法。

<template>
  <p>firstName: {{ person.firstName }}</p>
  <p>lastName: {{ person.lastName }}</p>
  <input type="text" v-model="person.fullName" />
</template>
<script>
  import { computed, reactive } from 'vue'
  export default {
      name: 'App',
      setup() {
          const person = reactive({
              firstName: '初',
              lastName: '映',
          })
          // 也可以傳入對(duì)象,目前和上面等價(jià)
          person.fullName = computed({
              get() {
                  return person.firstName + '*' + person.lastName
              },
              set(value) {
                console.log(value,'value');//為上述get的返回值
                  const newArr = value.split('*')
                  person.firstName = newArr[0]
                  person.lastName = newArr[1]
              },
          })
          return {
              person,
          }
      },
  }
</script>

【vue3】關(guān)于watch與computed的用法看這個(gè)就ok

至此本文結(jié)束,愿你有所收獲!
期待大家的關(guān)注與支持! 你的肯定是我更新的最大動(dòng)力?。。?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-409299.html

到了這里,關(guān)于【vue3】關(guān)于watch與computed的用法看這個(gè)就ok的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue3通透教程【六】setup語法糖、computed函數(shù)、watch函數(shù)

    專欄介紹: 涼哥作為 Vue 的忠實(shí) 粉絲輸出過大量的 Vue 文章,應(yīng)粉絲要求開始更新 Vue3 的相關(guān)技術(shù)文章,Vue 框架目前的地位大家應(yīng)該都曉得,所謂三大框架使用人數(shù)最多,公司選型最多的框架,涼哥之前在文章中也提到過就是 Vue 框架之所以火起來的原因,和 Vue 框架相比其

    2024年01月20日
    瀏覽(23)
  • vue3中,ref()、reactive()、computed()、watch() 和 watchEffect()的區(qū)別

    ref()、reactive()、computed()、watch() 和 watchEffect() 是 Vue 3 中常用的響應(yīng)式處理函數(shù),它們的主要區(qū)別如下: ref():ref() 函數(shù)用于將一個(gè)普通的 JavaScript 值轉(zhuǎn)化為響應(yīng)式對(duì)象。它返回一個(gè)具有 value 屬性的對(duì)象,我們可以通過訪問 value 屬性來獲取或修改值。當(dāng)我們對(duì) ref() 返回的對(duì)象

    2024年02月22日
    瀏覽(28)
  • Vue3 計(jì)算屬性和偵聽器實(shí)戰(zhàn)(computed、watch)——簡(jiǎn)易點(diǎn)餐頁面

    Vue3 計(jì)算屬性和偵聽器實(shí)戰(zhàn)(computed、watch)——簡(jiǎn)易點(diǎn)餐頁面

    這篇文章記錄一下 Vue3 計(jì)算屬性和偵聽器 (computed、watch) 實(shí)戰(zhàn)的內(nèi)容,這篇文章我們?cè)谟杏?jì)算屬性和偵聽器的基礎(chǔ)上,我們來制作一個(gè)簡(jiǎn)易點(diǎn)餐頁面,接下來我們一起來從零到一開始制作。 計(jì)算屬性和偵聽器相關(guān)文章推薦: 深入與淺談 Vue 中計(jì)算屬性和偵聽器的區(qū)別和使用

    2024年02月09日
    瀏覽(34)
  • Vue3中watch的用法

    ? ? ? ? watch函數(shù)用于偵聽某個(gè)值的變化,當(dāng)該值發(fā)生改變后,觸發(fā)對(duì)應(yīng)的處理邏輯。 用于開啟深度監(jiān)聽 是否開啟初始化檢測(cè),默認(rèn)是值發(fā)生變化時(shí),才會(huì)執(zhí)行監(jiān)聽器里面的方法,開啟immediate后初始化就執(zhí)行一次。 ? 偵聽器的回調(diào)使用與源完全相同的響應(yīng)式狀態(tài)是很常見的

    2024年02月16日
    瀏覽(25)
  • Web前端 ---- 【Vue3】computed計(jì)算屬性和watch偵聽屬性(偵聽被ref和reactive包裹的數(shù)據(jù))

    Web前端 ---- 【Vue3】computed計(jì)算屬性和watch偵聽屬性(偵聽被ref和reactive包裹的數(shù)據(jù))

    目錄 前言 computed watch watch偵聽ref數(shù)據(jù) ref簡(jiǎn)單數(shù)據(jù)類型 ref復(fù)雜數(shù)據(jù)類型 watch偵聽reactive數(shù)據(jù) 本文介紹在vue3中的computed計(jì)算屬性和watch偵聽屬性。介紹watch如何偵聽被ref和reactive包裹的數(shù)據(jù) 在vue3中,計(jì)算屬性computed也是組合式api,也就是說要先引入,再在setup中使用 語法 完整:

    2024年01月18日
    瀏覽(46)
  • vue3 watch 監(jiān)聽多值以及深度監(jiān)聽用法

    1.監(jiān)聽單個(gè)值 引入: import {…, watch} from “vue”; import {useRouter} from ‘vue-router’; 2.監(jiān)聽多個(gè)值 還是上面路由的例子 2.深度監(jiān)聽

    2024年02月14日
    瀏覽(23)
  • 學(xué)習(xí)Vue:computed VS watch

    在 Vue.js 中,Vue 實(shí)例與數(shù)據(jù)綁定不僅限于簡(jiǎn)單的插值表達(dá)式和指令。在實(shí)際開發(fā)中,您可能會(huì)遇到更復(fù)雜的數(shù)據(jù)處理需求。為此,Vue 提供了計(jì)算屬性和偵聽器這兩個(gè)強(qiáng)大的工具,讓您能夠更靈活地處理和響應(yīng)數(shù)據(jù)變化。 計(jì)算屬性是 Vue 實(shí)例中的一個(gè)特殊屬性,它允許您定義一

    2024年02月12日
    瀏覽(25)
  • Vue 中的 computed 和 watch 的區(qū)別

    在Vue.js中, computed 和 watch 是兩個(gè)常用的屬性,用于處理數(shù)據(jù)的監(jiān)聽和響應(yīng)。它們?cè)诠δ苌嫌幸恍┫嗨浦?,但也有一些重要的區(qū)別。本文將介紹 computed 和 watch 的區(qū)別,并提供相關(guān)的代碼示例。 Vue 中的 computed 和 watch 都是用來觀察數(shù)據(jù)變化的,但它們的用途和特點(diǎn)略有不同

    2024年02月07日
    瀏覽(23)
  • 淺談Vue的屬性,computed和watch

    是什么? 直接上demo,了解一下語法先~ conputed是 計(jì)算 屬性,watch是 監(jiān)聽 屬性,本質(zhì)上都是同一個(gè) watcher實(shí)例 ,它們都是 通過響應(yīng)式系統(tǒng)與數(shù)據(jù),頁面建立通信 。 computed帶有 \\\"懶計(jì)算\\\" 功能 監(jiān)聽的邏輯有差異 :computed是依賴的值變了,它去重新求值,watch是目標(biāo)值變了,它去

    2024年01月18日
    瀏覽(24)
  • 【Vue】watch、methods 和 computed 的區(qū)別?

    一、基本說明 1.computed: 計(jì)算屬性將被混入到 Vue 實(shí)例中。所有 getter 和 setter 的 this 上下文自動(dòng)地綁定為 Vue 實(shí)例。 2.methods: methods 將被混入到 Vue 實(shí)例中??梢灾苯油ㄟ^ VM 實(shí)例訪問這些方 法,或者在指令表達(dá)式中使用。方法中的 this 自動(dòng)綁定為 Vue 實(shí)例。 3.watch: 觀察

    2024年02月09日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包