Vue3使用ref與reactive創(chuàng)建響應(yīng)式對(duì)象的示例代碼
介紹ref
先來簡(jiǎn)單介紹一下ref,它可以定義響應(yīng)式的變量
- 語(yǔ)法:
let xxx = ref(初始值)
。 - **返回值:**一個(gè)
RefImpl
的實(shí)例對(duì)象,簡(jiǎn)稱ref對(duì)象
或ref
,ref
對(duì)象的value
屬性是響應(yīng)式的。 - 注意點(diǎn):
JS
中操作數(shù)據(jù)需要:xxx.value
,但模板中不需要.value
,直接使用即可。- 對(duì)于
let name = ref('張三')
來說,name
不是響應(yīng)式的,name.value
是響應(yīng)式的。
下面我們看一看
上圖紅框中代表的意思是,我們哪里需要響應(yīng)就在哪個(gè)里面導(dǎo)入上述代碼即可
同時(shí)我們要在js中為變量添加value,否則不會(huì)更新,如下圖所示
<template> <div class="person"> <h2>姓名:{{name}}</h2> <h2>年齡:{{age}}</h2> <h2>地址:{{address}}</h2> <button @click="changeName">修改名字</button> <button @click="changeAge">修改年齡</button> <button @click="showTel">查看聯(lián)系方式</button> </div> </template> <script lang="ts" setup name="Person11"> import {ref} from 'vue' let name = ref('饅頭') let age = ref(18) let tel = '11514611254' let address = '北京市' function changeName() { name.value = 'zhang-san' console.log(name) } function changeAge() { age.value += 1 console.log(age) } function showTel() { alert(tel) } </script> <style scoped> .person { background-color: skyblue; box-shadow: 0 0 10px; border-radius: 10px; padding: 20px; } button { margin: 0 5px; } </style>
介紹reactive
相對(duì)比ref,reactive針對(duì)自定義的對(duì)象數(shù)組等
- 語(yǔ)法:
let 響應(yīng)式對(duì)象= reactive(源對(duì)象)
。 - **返回值:**一個(gè)
Proxy
的實(shí)例對(duì)象,簡(jiǎn)稱:響應(yīng)式對(duì)象。 - 注意點(diǎn):
reactive
定義的響應(yīng)式數(shù)據(jù)是“深層次”的。
實(shí)際例子如下
<template> <div class="person"> <h2>{{Handmade.name}}手辦,價(jià)值{{ Handmade.price }}元</h2> <button @click="changePrice">修改價(jià)格</button> </div> </template> <script lang="ts" setup name="Person11"> import {reactive} from 'vue' let Handmade = reactive({name:'小舞',price:888}) function changePrice() { Handmade.price += 50 } </script>
如果是數(shù)組呢
<template> <div class="person"> <h2>{{Handmade.name}}手辦,價(jià)值{{ Handmade.price }}元</h2> <button @click="changePrice">修改價(jià)格</button> <br> <h2>運(yùn)動(dòng):</h2> <ul> <li v-for="i in sports" :key="i.id">{{i.name}}</li> </ul> <button @click="changeFirstGame">修改第一個(gè)運(yùn)動(dòng)的名字</button> </div> </template> <script lang="ts" setup name="Person11"> import {reactive} from 'vue' let Handmade = reactive({name:'小舞',price:888}) let sports = reactive([ {id:'a',name:'足球'}, {id:'b',name:'籃球'}, {id:'c',name:'乒乓球'} ]) function changePrice() { Handmade.price += 50 } function changeFirstGame(){ sports[0].name = '羽毛球' } </script>
運(yùn)行結(jié)果如下
==注意:==深層次的數(shù)據(jù)也行可以的
let obj = reactive({ a:{ b:{ c:666 } } })
下面再進(jìn)行擴(kuò)展一下知識(shí)點(diǎn)
ref擴(kuò)展
前面說ref可以定義基本類型,但是這里我再說明一下,其實(shí)ref也可以創(chuàng)建對(duì)象類型,但是reactive確實(shí)不可以定義基本類型
<script lang="ts" setup name="Person11"> import {ref} from 'vue' let Handmade = ref({name:'小舞',price:888}) let sports = ref([ {id:'a',name:'足球'}, {id:'b',name:'籃球'}, {id:'c',name:'乒乓球'} ]) function changePrice() { Handmade.value.price += 50 } function changeFirstGame(){ sports.value[0].name = '羽毛球' } </script>
其實(shí)只需要注意一點(diǎn),別忘了ref在js中的書寫要求要加.value
若ref
接收的是對(duì)象類型,內(nèi)部其實(shí)也是調(diào)用了reactive
函數(shù)。
ref和reactive對(duì)比
宏觀角度看:
ref
用來定義:基本類型數(shù)據(jù)、對(duì)象類型數(shù)據(jù);
reactive
用來定義:對(duì)象類型數(shù)據(jù)。
區(qū)別:
ref
創(chuàng)建的變量必須使用.value
(可以使用volar
插件自動(dòng)添加.value
)。
在設(shè)置–》擴(kuò)展–》Volar
reactive
重新分配一個(gè)新對(duì)象,會(huì)失去響應(yīng)式(可以使用Object.assign
去整體替換)。
其實(shí)就是不能重復(fù)寫同一個(gè)對(duì)象
使用原則:
- 若需要一個(gè)基本類型的響應(yīng)式數(shù)據(jù),必須使用
ref
。- 若需要一個(gè)響應(yīng)式對(duì)象,層級(jí)不深,
ref
、reactive
都可以。- 若需要一個(gè)響應(yīng)式對(duì)象,且層級(jí)較深,推薦使用
reactive
。
總結(jié)
本文根據(jù)禹神課程進(jìn)行總結(jié),本節(jié)主要介紹ref和reactive
以上就是Vue3使用ref與reactive創(chuàng)建響應(yīng)式對(duì)象的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Vue3 ref reactive響應(yīng)式對(duì)象的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue中如何實(shí)現(xiàn)后臺(tái)管理系統(tǒng)的權(quán)限控制的方法步驟
這篇文章主要介紹了vue中如何實(shí)現(xiàn)后臺(tái)管理系統(tǒng)的權(quán)限控制的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09vue實(shí)現(xiàn)左右伸縮方式(el-drawer自定義位置展開收縮)
這篇文章主要介紹了vue實(shí)現(xiàn)左右伸縮方式(el-drawer自定義位置展開收縮),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07vue實(shí)現(xiàn)接口封裝的實(shí)現(xiàn)示例
本文主要介紹了vue實(shí)現(xiàn)接口封裝的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11Vue3封裝 Message消息提示實(shí)例函數(shù)詳解
這篇文章主要介紹了Vue3封裝 Message消息提示實(shí)例函數(shù),具有一定的實(shí)用價(jià)值,需要的朋友可以參考下,希望能夠給你帶來幫助2021-09-09vue+iview+less+echarts實(shí)戰(zhàn)項(xiàng)目總結(jié)
本篇文章是作者通過學(xué)習(xí)vue+iview+less+echarts制作一個(gè)小系統(tǒng)后,做的心得以及遇到的坑的總結(jié),值得大家學(xué)習(xí)參考。2018-02-02Vue 父子組件數(shù)據(jù)傳遞的四種方式( inheritAttrs + $attrs + $listeners)
這篇文章主要介紹了Vue 父子組件數(shù)據(jù)傳遞的四種方式( inheritAttrs + $attrs + $listeners),需要的朋友可以參考下2018-05-05Vue.js bootstrap前端實(shí)現(xiàn)分頁(yè)和排序
這篇文章主要為大家詳細(xì)介紹了Vue.js結(jié)合bootstrap前端實(shí)現(xiàn)分頁(yè)和排序效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03vue項(xiàng)目下,如何用命令直接修復(fù)ESLint報(bào)錯(cuò)
這篇文章主要介紹了vue項(xiàng)目下,如何用命令直接修復(fù)ESLint報(bào)錯(cuò),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04