這篇文章給大家介紹vue3 中computed 新用法的示例分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的選項式API,所以可以直接使用 vue2的寫法。
組合式 API 中使用 computed 時,需要先引入:import { computed } from "vue"。引入之后 computed 可以傳入的參數有兩種:回調函數和 options 。具體看看它是如何使用的?
在vue2中,computed 寫法:
computed:{ sum(){ return this.num1+ this.num2 } }
在vue3 如果使用選項式API也可以這樣寫,主要看下組合式API的使用。
示例1:求和
import { ref, computed } from "vue" export default{ setup(){ const num1 = ref(1) const num2 = ref(1) let sum = computed(()=>{ return num1.value + num2.value }) } }
調用 computed 時, 傳入了一個箭頭函數,返回值作為 sum 。相比之前,使用更加簡單了。如果需要計算多個屬性值,直接調用就可以。如:
let sum = computed(()=>{ return num1.value + num2.value }) let mul = computed(()=>{ return num1.value * num2.value })
該示例過于簡單,看不明白的可在文章后面閱讀完整實例1。
計算屬性默認只有 getter ,在需要的時候也可以提供 setter 。在vue2中用法如下:
computed:{ mul:{ get(){ // num1值改變時觸發 return this.num1 * 10 }, set(value){ // mul值被改變時觸發 this.num1 = value /10 } } }
mul 屬性是 給num1 放大10,如果修改 mul 的值,則 num1 也隨之改變。
在 vue3 中 :
let mul = computed({ get:()=>{ return num1.value *10 }, set:(value)=>{ return num1.value = value/10 } })
這兩種寫法不太一樣,仔細觀察區別不大,get 和 set 調用也是一樣的。
在此示例中代碼簡單,如果沒太理解,可查看文章后面的完整實例2。
完整實例1:
<template> <div> {{num1}} + {{num2}} = {{sum}} <br> <button @click="num1++">num1自加</button> <button @click="num2++">num2自加</button> </div> </template> <script> import { ref, computed } from "vue" export default{ setup(){ const num1 = ref(1) const num2 = ref(1) let sum = computed(()=>{ return num1.value + num2.value }) return{ num1, num2, sum } } } </script>
完整實例2:
<template> <div> {{num1}} + {{num2}} = {{sum}}<br> <button @click="num1++">num1自加</button> <button @click="num2++">num2自加</button> <br> {{num1}} * 10 = {{mul}} <button @click="mul=100">改值</button> </div> </template> <script> import { ref, computed } from "vue" export default{ setup(){ const num1 = ref(1) const num2 = ref(1) let sum = computed(()=>{ return num1.value + num2.value }) let mul = computed({ get:()=>{ return num1.value *10 }, set:(value)=>{ return num1.value = value/10 } }) return{ num1, num2, sum, mul } } } </script>
計算屬性需要傳入一個參數怎么寫呢?
<template> <div> <div v-for="(item,index) in arr" :key="index" @click="sltEle(index)"> {{item}} </div> </div> </template> <script> import { ref, computed,reactive } from "vue" export default{ setup(){ const arr = reactive([ '哈哈','嘿嘿' ]) const sltEle = computed( (index)=>{ console.log('index',index); }) return{ arr,sltEle } } } </script>
直接這樣寫,運行的時候,出現錯誤:Uncaught TypeError: $setup.sltEle is not a function。
原因:
computed 計算屬性并沒有給定返回值,我們調用的是一個函數,而 computed 內部返回的并不是一個函數,所以就會報錯:sltEle is not a function。
解決辦法:
需要在計算屬性 內部返回一個函數。修改代碼如下:
const sltEle = computed( ()=>{ return function(index){ console.log('index',index); } })
關于vue3 中computed 新用法的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。