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

Vue3淺談:(二)Vue3計(jì)算屬性

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

目錄

一、Vue3計(jì)算屬性

1.Vue3計(jì)算屬性基礎(chǔ)使用

2.計(jì)算屬性緩存和常規(guī)方法

3.可寫計(jì)算屬性


一、Vue3計(jì)算屬性

1.Vue3計(jì)算屬性基礎(chǔ)使用

當(dāng)我們需要針對(duì)一些數(shù)據(jù)進(jìn)行一些邏輯運(yùn)算時(shí)可以使用模板中的表達(dá)式如下:

<script setup lang="ts">
import { reactive } from "vue";
const onePeople = reactive({
  name: "Sam Xiaoguai",
  chineseName: [
    "薩姆",
    "小乖"
  ]
});
</script>
<template>
  <div>
    {{ onePeople.chineseName.length > 0 ? "有中文名" : "沒有" }}
  </div>
</template>
<style scoped></style>

但是如果在模板中寫太多邏輯,會(huì)讓模板變得臃腫,難以維護(hù)。因此我們可以使用計(jì)算屬性computed()?方法來描述依賴響應(yīng)式狀態(tài)的復(fù)雜邏輯,返回值為一個(gè)計(jì)算屬性 ref。

<script setup lang="ts">
import { reactive,computed } from "vue";
const onePeople = reactive({
  name: "Sam Xiaoguai",
  chineseName: [
    "薩姆",
    "小乖"
  ]
});
// 一個(gè)計(jì)算屬性 ref
const haveChineseName = computed<string>(() => {
  return onePeople.chineseName.length > 0 ? "有中文名" : "沒有"
})
</script>
<template>
  <div>
    {{ haveChineseName }}
  </div>
</template>
<style scoped></style>

2.計(jì)算屬性緩存和常規(guī)方法

<script setup lang="ts">
import { reactive,computed } from "vue";
const onePeople = reactive({
  name: "Sam Xiaoguai",
  chineseName: [
    "薩姆",
    "小乖"
  ]
});
// 一個(gè)計(jì)算屬性 ref
const haveChineseName = computed<string>(() => {
  return onePeople.chineseName.length > 0 ? "有中文名" : "沒有"
})
function haveChineseNameFun ():string {
    return onePeople.chineseName.length > 0 ? "有中文名" : "沒有"
}
</script>
<template>
  <div>
    {{ haveChineseName }}
  </div>
  <div>
    {{ haveChineseNameFun() }}
  </div>
</template>
<style scoped></style>

我們可以看到兩種方式在結(jié)果上確實(shí)是完全相同的,然而,不同之處在于計(jì)算屬性值會(huì)基于其響應(yīng)式依賴被緩存。一個(gè)計(jì)算屬性僅會(huì)在其響應(yīng)式依賴更新時(shí)才重新計(jì)算。這意味著只要?onePeople不改變,無論多少次訪問?haveChineseName都會(huì)立即返回先前的計(jì)算結(jié)果,而不用重復(fù)執(zhí)行 getter 函數(shù)

如下:計(jì)算屬性永遠(yuǎn)不會(huì)更新,因?yàn)?Date.now()?并不是一個(gè)響應(yīng)式依賴

相比之下,方法調(diào)用總是會(huì)在重渲染發(fā)生時(shí)再次執(zhí)行函數(shù)。

<script setup lang="ts">
import {  computed } from "vue";
const now = computed<number>(() => Date.now());
function nowTime(): number {
  return Date.now();
}
</script>
<template>
  <div>
    {{ now }}
  </div>
  <div>
    {{ now }}
  </div>
  <div>
    {{ now }}
  </div>
  <div>
    {{ nowTime() }}
  </div>
  <div>
    {{ nowTime() }}
  </div>
  <div>
    {{ nowTime() }}
  </div>
</template>
<style scoped></style>

當(dāng)我們每增加一個(gè)包含nowTime的div時(shí),會(huì)發(fā)現(xiàn)頁面上的nowTime的值會(huì)相應(yīng)的發(fā)生變化,而now并不會(huì)。

所以當(dāng)我們有一個(gè)非常耗性能的計(jì)算屬性?list,需要循環(huán)一個(gè)巨大的數(shù)組并做許多計(jì)算邏輯,并且可能也有其他計(jì)算屬性依賴于?list。沒有緩存的話,我們會(huì)重復(fù)執(zhí)行非常多次?list?的 getter,然而這實(shí)際上沒有必要!如果你確定不需要緩存,那么也可以使用方法調(diào)用。

3.可寫計(jì)算屬性

計(jì)算屬性默認(rèn)是只讀的。當(dāng)你嘗試修改一個(gè)計(jì)算屬性時(shí),你會(huì)收到一個(gè)運(yùn)行時(shí)警告。

如下:

<script setup lang="ts">
import { ref, computed } from 'vue'

const firstName = ref('Sam')
const lastName = ref('xiaoguai')
const fullName = computed<string>(() => {
  return firstName.value + ' ' + lastName.value;
});
fullName.value = "samxiaoguai"
</script>
<template>
  <div>
    {{ fullName }}
  </div>
</template>
<style scoped></style>

我們會(huì)看到一個(gè)警告??:

Write operation failed: computed value is readonly

因此如果你需要用到“可寫”的屬性,你可以通過同時(shí)提供 getter 和 setter 來創(chuàng)建

如下:

<script setup lang="ts">
import { ref, computed } from 'vue'

const firstName = ref('Sam')
const lastName = ref('xiaoguai')
const fullName = computed({
  // getter
  get() {
    return firstName.value + ' ' + lastName.value
  },
  // setter
  set(newValue) {
    // 注意:我們這里使用的是解構(gòu)賦值語法
    [firstName.value, lastName.value] = newValue.split(' ')
  }
})
fullName.value = "sam xiaoguai"
</script>
<template>
  <div>
    {{ fullName }}
  </div>
</template>
<style scoped></style>

有問題可以在下面評(píng)論,我會(huì)為大家解答,如果此文對(duì)大家有幫助,歡迎大家點(diǎn)點(diǎn)關(guān)注啊,博主在此感謝。文章來源地址http://www.zghlxwxcb.cn/news/detail-424551.html

到了這里,關(guān)于Vue3淺談:(二)Vue3計(jì)算屬性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包