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

Vue3:計(jì)算屬性、監(jiān)聽器

這篇具有很好參考價(jià)值的文章主要介紹了Vue3:計(jì)算屬性、監(jiān)聽器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

computed 計(jì)算屬性

計(jì)算屬性是指 基于現(xiàn)有狀態(tài)派生 (演變) 出新的狀態(tài),現(xiàn)有狀態(tài)發(fā)生變化,派生狀態(tài)重新計(jì)算。
computed 接收回調(diào)函數(shù)作為參數(shù),基于回調(diào)函數(shù)中使用的響應(yīng)式數(shù)據(jù)進(jìn)行計(jì)算屬性的創(chuàng)建,回調(diào)函數(shù)的返回值就是基于現(xiàn)有狀態(tài)演變出的新狀態(tài)。

// 定義一個(gè)數(shù)據(jù)
const num = ref(0);
// result 通過計(jì)算num動(dòng)態(tài)獲得
const result = computed(() => num.value * 2);
  • 完整寫法
import { ref, computed } from 'vue';

export default {
    setup() {
        // 響應(yīng)式數(shù)據(jù)
        const firstName = ref('張');
        const lastName = ref('三');
        
		// 計(jì)算屬性(完整寫法,考慮讀和寫)
        const fullName = computed({
            get() {
                return firstName.value + lastName.value;
            },
            set (value) {
                const nameArr = value.split('-');
                firstName.value = nameArr[0];
                lastName.value = nameArr[1];
            },
        });
        
       	// 返回所有的數(shù)據(jù)和方法,才能使用
        return { firstName, lastName, fullName }
    }
}

案例:動(dòng)態(tài)顯示名字。

<template>
	<input type="text" v-model="firstName" />
	<input type="text" v-model="lastName" />
	<div>姓名:{{ name }}</div>
</template>

<script>
import { ref, computed } from 'vue';

export default {
    setup() {
        const firstName = ref('');
        const lastName = ref('');
        // 姓名通過計(jì)算屬性獲得
        const name = computed(() => firstName.value + lastName.value);
        
        return { firstName, laseName, name }
    }
}
</script>

watch 監(jiān)聽狀態(tài)

watch 方法用于監(jiān)聽響應(yīng)式數(shù)據(jù)的變化,數(shù)據(jù)發(fā)生變化時(shí)觸發(fā)。
Vue2 的 watch 是一個(gè)配置項(xiàng),Vue3 的 watch 是一個(gè)方法。

# 語法格式
watch([監(jiān)視對(duì)象], fn{監(jiān)視的回調(diào)}, {監(jiān)視的配置});

監(jiān)聽 ref 的響應(yīng)式數(shù)據(jù)

監(jiān)聽 ref 數(shù)據(jù)時(shí),不能使用 .value,因?yàn)楸O(jiān)聽的是 value 的值,而不是 ref 數(shù)據(jù)。

  • 監(jiān)聽多個(gè)值時(shí),newValue 和 oldValue 會(huì)接收一個(gè)數(shù)組,參數(shù)是監(jiān)聽的每一項(xiàng)。

Vue3:計(jì)算屬性、監(jiān)聽器

使用 watch 方法監(jiān)聽基于 ref 創(chuàng)建的響應(yīng)式數(shù)據(jù) (基本數(shù)據(jù)類型)。

<template>
	<input type="text" v-model="str">
</template>

<script>
import { ref, watch } from 'vue';

export default {
    setup() {
        const str ref('');
        
        // 監(jiān)聽表單內(nèi)容 str
        watch(str, (newValue, oldValue) => {
            console.log(newValue, oldValue);
        }, {
            // 監(jiān)聽的配置
            immediate: true,
            deep: true
        });
        
        // 返回所有的數(shù)據(jù)和方法,才能使用
        return { str }
    }
}
</script>

使用 watch 監(jiān)聽基于 ref 創(chuàng)建的響應(yīng)式數(shù)據(jù) (引用數(shù)據(jù)類型)。

import { ref, watch } from "vue";

export default {
    setup() {
        const person = ref({ name: '張三' });
        
        // 監(jiān)聽
        watch(person.value, (newValue, oldValue) => {
            console.log(newValue, oldValue);
        }, {
            // 監(jiān)聽的配置
            immediate: true,
            deep: true
        });
        
        // 返回所有的數(shù)據(jù)和方法,才能使用
        return { person }
    },
};

使用 watch 監(jiān)聽響應(yīng)式數(shù)據(jù)內(nèi)部的具體屬性 (基本數(shù)據(jù)類型)

import { ref, watch } from "vue";

export default {
    setup() {
        const person = ref({ name: '張三' });
        
        // 監(jiān)聽
        watch(
            () => person.value.name,
            (newValue, oldValue) => {
                console.log(newValue, oldValue);
            }
        );
        
        // 返回所有的數(shù)據(jù)和方法,才能使用
        return { person }
    },
};

監(jiān)聽 reactive 的響應(yīng)式數(shù)據(jù)

import { ref, watch } from "vue";

export default {
    setup() {
        const person = reactive({ name: '張三' });
        
        // 監(jiān)聽
        watch(person, (newValue, oldValue) => {
            console.log(newValue, oldValue);
        });
        
        // 返回所有的數(shù)據(jù)和方法,才能使用
        return { person }
    },
};

監(jiān)聽 reactive 時(shí)存在的問題

坑:監(jiān)聽 reactive 時(shí),oldValue 無法正確獲取,都是最新值。(Vue3的遺留問題)

  • 解決方案:

watch 的 參數(shù)1 使用 () => 對(duì)象名.屬性名 監(jiān)聽單個(gè)屬性,但是要使用 deep 深度監(jiān)聽。(雖然麻煩,但是有效)

  const person = ref({ name: '張三', age: 18 });
  
  watch(
      // 參數(shù)一寫法解決 oldValue 值無法獲取
      [() => person.name, () => person.age],
      (newValue, oldValue) => {
          console.log(newValue, oldValue);
      }
  );

坑:使用 reactive 時(shí),強(qiáng)制開啟 deep 深度監(jiān)視,且 deep 無法被關(guān)閉。(Vue3的遺留問題)

Vue3:計(jì)算屬性、監(jiān)聽器

import { ref, watch } from "vue";

export default {
    setup() {
        const person = reactive({ name: '張三' });
        
        // 監(jiān)聽
        watch(person, (newValue, oldValue) => {
            console.log(newValue, oldValue);
        }, {
            deep: false,   // 無效,無法關(guān)閉
        });
        
        // 返回所有的數(shù)據(jù)和方法,才能使用
        return { person }
    },
};

watchEffect 監(jiān)聽狀態(tài)

watchEffect 函數(shù)在頁面加載完成后和數(shù)據(jù)更新時(shí)調(diào)用。
watch 和 watchEffect 的區(qū)別:

  • watch:既要指明監(jiān)視的屬性,也要指明監(jiān)視的回調(diào)。
  • watchEffect:不用指明監(jiān)視哪個(gè)屬性,監(jiān)視的回調(diào)中用到哪個(gè)屬性,就監(jiān)聽哪個(gè)屬性。

watchEffect 和 computed 的區(qū)別:

  • computed 注重計(jì)算出來的值(回調(diào)函數(shù)的返回值),所以必須要寫返回值。
  • watchEffect 更注重的是過程(回調(diào)函數(shù)的函數(shù)),所以不用寫返回值。
# 語法格式
watchEffect(() => {
    console.log('watchEffect 函數(shù)執(zhí)行了');
})
<template>
    <h1>{{ person.name }}</h1>
    <button @click="updatePerson">點(diǎn)擊更新名字</button>
</template>

<script>
import { reactive, watchEffect } from "vue";
export default {
    setup() {
        // 響應(yīng)式數(shù)據(jù)
        let person = reactive({
            name: "張三",
            age: 18,
            job: {
                j1: {
                    salary: 20,
                },
            },
        });

        // 監(jiān)視
        watchEffect(() => {
            console.log("watchEffect執(zhí)行了");
            console.log(person.name);
        });

        // 更新名字
        const updatePerson = () => {
            person.name = "李四";
        };
		
        return { person, updatePerson };
    },
};
</script>

toRef 函數(shù)

創(chuàng)建一個(gè) ref 對(duì)象,其 value 值指向另一個(gè)對(duì)象中的某個(gè)屬性。
大白話解釋:toRef 方法用于將響應(yīng)式數(shù)據(jù)內(nèi)部的普通數(shù)據(jù)轉(zhuǎn)化為響應(yīng)式數(shù)據(jù),并且轉(zhuǎn)換后的數(shù)據(jù)和原始數(shù)據(jù)存在引用關(guān)系,存在引用關(guān)系意味著當(dāng)原始數(shù)據(jù)發(fā)生變化后,toRefs 轉(zhuǎn)換后的數(shù)據(jù)也會(huì)跟著變化。
應(yīng)用:要將響應(yīng)式對(duì)象中的某個(gè)屬性單獨(dú)提供給外部使用時(shí)。

// 語法
const name = toRef(對(duì)象名, '屬性名')
<template>
	<h1>{{ name }}</h1>
	<h1>{{ age }}</h1>
	<h1>{{ salary }}</h1>
</template>

<script>
import { reactive, toRef } from 'vue'
export default {
    name: 'App',
    setup() {
        let person = reactive({
            name: '張三',
            age: 18,
            job: {
                j1: {
                    salary: 20
                }
            }
        })

        return {
            pname: toRef(person, 'name'),
            age: toRef(person, 'age'),
            salary: toRef(person.job.j1, 'salary')
        }
    },
}
</script>

toRefs 函數(shù)

toRefs方法接收引用數(shù)據(jù)類型的響應(yīng)式數(shù)據(jù),它可以將數(shù)據(jù)中的第一層屬性全部轉(zhuǎn)換為響應(yīng)式數(shù)據(jù),返回值是一個(gè)對(duì)象,對(duì)象中存儲(chǔ)了所有轉(zhuǎn)換之后的響應(yīng)式數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-485805.html

export default {
    setup() {
        const person = reactive({
            name: "張三",
            brand: {
                title: "寶馬",
                year: 1
            }
        });
        
        return {
            ...toRefs(person),
            ...toRefs(person.brand)	// 轉(zhuǎn)換第二層數(shù)據(jù)為響應(yīng)式
        }
    }
}

到了這里,關(guān)于Vue3:計(jì)算屬性、監(jiān)聽器的文章就介紹完了。如果您還想了解更多內(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監(jiān)聽器使用

    Vue3監(jiān)聽器使用

    watch(監(jiān)聽的對(duì)象或值, 回調(diào)函數(shù)(參數(shù)新值,舊值), 配置項(xiàng)是對(duì)象={ ? immediate: true//立即監(jiān)聽--進(jìn)入就會(huì)執(zhí)行一次 deep:true //深度監(jiān)聽 }) 首先引入 設(shè)置響應(yīng)式數(shù)據(jù) 設(shè)置點(diǎn)擊事件,點(diǎn)擊觸發(fā)修改num 監(jiān)聽簡(jiǎn)單數(shù)據(jù)類型-----?immediate: true//立即監(jiān)聽--進(jìn)入就會(huì)執(zhí)行一次 ---------------

    2024年02月07日
    瀏覽(24)
  • Vue3 —— watch 監(jiān)聽器及源碼學(xué)習(xí)

    該文章是在學(xué)習(xí) 小滿vue3 課程的隨堂記錄 示例均采用 script setup ,且包含 typescript 的基礎(chǔ)用法 在 vue3 中,必須是 ref 、 reactive 包裹起來的數(shù)據(jù),才可以被 watch 監(jiān)聽到 1、語法: watch(source, cb, options) source 是監(jiān)聽的目標(biāo),有 4 種書寫形式: reactive 形式的響應(yīng)式數(shù)據(jù) ref 形式的響

    2024年02月12日
    瀏覽(23)
  • Vue3前端開發(fā),watch偵聽器的深度監(jiān)聽和精確監(jiān)聽

    Vue3前端開發(fā),watch偵聽器的深度監(jiān)聽和精確監(jiān)聽

    Vue3前端開發(fā),watch偵聽器的深度監(jiān)聽和精確監(jiān)聽!今天和大家分享的內(nèi)容是,關(guān)于watch的深度偵聽和精確監(jiān)聽。 首先看一下,第一個(gè)案例,練習(xí)的是,深度監(jiān)聽的效果。默認(rèn)是淺的偵聽,是不會(huì)觸發(fā)回調(diào)函數(shù)的。 如圖,當(dāng)我們點(diǎn)擊按鈕,修改num值的時(shí)候,觸發(fā)了回調(diào)函數(shù),在

    2024年01月23日
    瀏覽(20)
  • 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.0 watch和watchEffect監(jiān)聽器:VCA

    在項(xiàng)目中,有時(shí)候檢測(cè)一個(gè)變量的值是否反升了變化。通常使用的watch或者使用低效的循環(huán)判斷。 在次vue中給我們?cè)O(shè)置了深度監(jiān)測(cè)數(shù)據(jù)繁盛變化的方法。 1.vue中提供了在watch監(jiān)聽時(shí)設(shè)置deep:true 就可以實(shí)現(xiàn)對(duì)對(duì)象的深度監(jiān)聽; 2.immediate:true,代表watch里面聲明了之后會(huì)立馬執(zhí)行han

    2024年02月06日
    瀏覽(30)
  • 【vue2】計(jì)算屬性(computed)與偵聽器(watch)詳解

    【vue2】計(jì)算屬性(computed)與偵聽器(watch)詳解

    ??博???????主: 初映CY的前說(前端領(lǐng)域) ??個(gè)人信條: 想要變成得到,中間還有做到! ??本文核心: 計(jì)算屬性與偵聽屬性的用法 目錄( 文末有給大家準(zhǔn)備好的Xmind思維導(dǎo)圖 ) 一、計(jì)算屬性computed ①默認(rèn)get()方法,僅是獲取值 ②不僅僅是獲取值,還具有修改屬性功能

    2024年01月16日
    瀏覽(20)
  • GuLi商城-前端基礎(chǔ)Vue-計(jì)算屬性computed和偵聽器watch
  • 前端Vue入門-day02-vue指令、computed計(jì)算屬性與watch偵聽器

    前端Vue入門-day02-vue指令、computed計(jì)算屬性與watch偵聽器

    (創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動(dòng)力,如果看完對(duì)你有幫助,請(qǐng)留下您的足跡) 目錄 指令補(bǔ)充 指令修飾符 v-bind 對(duì)于樣式控制的增強(qiáng)? 操作class 案例:京東秒殺 tab 導(dǎo)航高亮 操作style? v-model 應(yīng)用于其他表單元素? computed 計(jì)算屬性 基礎(chǔ)語法 computed 計(jì)算屬

    2024年02月11日
    瀏覽(53)
  • 微信小程序——自定義組件組件的創(chuàng)建和引用,修改組件的樣式隔離選項(xiàng),stylesolation的可選值,properties屬性,data數(shù)據(jù),methods方法,數(shù)據(jù)監(jiān)聽器,用法,監(jiān)聽對(duì)象屬性的變化

    微信小程序——自定義組件組件的創(chuàng)建和引用,修改組件的樣式隔離選項(xiàng),stylesolation的可選值,properties屬性,data數(shù)據(jù),methods方法,數(shù)據(jù)監(jiān)聽器,用法,監(jiān)聽對(duì)象屬性的變化

    ①在項(xiàng)目的根目錄中,鼠標(biāo)右鍵,創(chuàng)建 components - test 文件夾 ②在新建的 components - test 文件夾上,鼠標(biāo)右鍵,點(diǎn)擊\\\"新建 Component \\\" ③鍵入組件的名稱之后回車,會(huì)自動(dòng)生成組件對(duì)應(yīng)的4個(gè)文件,后綴名分別為 js , json ,. wxml 和. wxss 注意,為了保證目錄結(jié)構(gòu)的清晰,建議把不同的

    2024年02月15日
    瀏覽(110)
  • 【Vue2.x源碼系列07】監(jiān)聽器watch原理

    上一章 Vue2計(jì)算屬性原理,我們介紹了計(jì)算屬性是如何實(shí)現(xiàn)的?計(jì)算屬性緩存原理?以及洋蔥模型是如何應(yīng)用的? 本章目標(biāo) 監(jiān)聽器是如何實(shí)現(xiàn)的? 監(jiān)聽器選項(xiàng) - immediate、deep 內(nèi)部實(shí)現(xiàn) 在 Vue初始化實(shí)例的過程中,如果用戶 options選項(xiàng)中存在偵聽器,則初始化偵聽器 watch 類型:

    2023年04月20日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包