vue3中的reactive、readonly和shallowReactive使用詳解
1. reactive 與 readonly 使用
readonly:拷貝一份 proxy 對(duì)象將其設(shè)置為只讀。
使用 readonly 時(shí), 變量里的屬性不可改變。
需要注意的是:
當(dāng)原本數(shù)據(jù)改變時(shí),使用了 readonly 函數(shù)的值也會(huì)發(fā)生改變。
<template> <div> <form> <input v-model="obj.name" type="text" /> <br /> <input v-model="obj.age" type="text" /> <br /> <button @click.prevent="submit">提交</button> </form> </div> </template> <script setup lang="ts"> import { ref, reactive, readonly, shallowReactive } from 'vue' const obj = reactive({ name: '張三', age: 23 }) const copy = readonly(obj) const submit = () => { obj.age++ console.log(copy) } </script>
在這個(gè)例子中,修改響應(yīng)式對(duì)象中的 age 屬性, readonly 中的 age 屬性也會(huì)隨之更改。
2. shallowReactive
- 創(chuàng)建
淺層
的響應(yīng)式
對(duì)象 - 修改內(nèi)部屬性時(shí),
只改變值
,不更新視圖
在 Vue3 中,可以使用 shallowReactive 函數(shù)創(chuàng)建一個(gè)淺層響應(yīng)式對(duì)象。它接收一個(gè)普通對(duì)象作為參數(shù),返回一個(gè)淺層響應(yīng)式代理對(duì)象。這個(gè)代理對(duì)象只能處理對(duì)象的一級(jí)屬性,不能處理嵌套在對(duì)象中的屬性的響應(yīng)式更新。當(dāng)我們讀取代理對(duì)象的屬性時(shí),會(huì)觸發(fā)依賴收集;當(dāng)我們修改代理對(duì)象的屬性時(shí),會(huì)觸發(fā)相應(yīng)的依賴更新。在調(diào)用 shallowReactive 函數(shù)時(shí), Vue3 會(huì)使用 Proxy 對(duì)象對(duì)傳入的對(duì)象進(jìn)行代理,從而實(shí)現(xiàn)淺層響應(yīng)式特性。
<template> <div>{{ state }}</div> <br /> <button @click="change1">test1</button> <br /> <button @click="change2">test2</button> </template> <script setup lang="ts"> import { ref, reactive, readonly, shallowReactive } from 'vue' const state = shallowReactive({ a: 1, first: { b: 2, second: { c: 3 } } }) const change1 = () => { state.a = 7 } const change2 = () => { state.first.b = 8 state.first.second.c = 9 console.log(state) } </script>
點(diǎn)擊 test1 后: state.a 的值變?yōu)?7
點(diǎn)擊 test2 后:視圖沒有發(fā)生改變,控制臺(tái)如下
到此這篇關(guān)于vue3中的reactive、readonly和shallowReactive的文章就介紹到這了,更多相關(guān)vue3 reactive、readonly和shallowReactive內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Vue.js父組件$on無法監(jiān)聽子組件$emit觸發(fā)事件的問題
今天小編就為大家分享一篇解決Vue.js父組件$on無法監(jiān)聽子組件$emit觸發(fā)事件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue基礎(chǔ)popover彈出框編寫及bug問題分析
這篇文章主要為大家介紹了Vue基礎(chǔ)popover彈出框編寫及bug問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09解決vue+router路由跳轉(zhuǎn)不起作用的一項(xiàng)原因
這篇文章主要介紹了解決vue+router路由跳轉(zhuǎn)不起作用的一項(xiàng)原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Vue.js結(jié)合bootstrap實(shí)現(xiàn)分頁控件
這篇文章主要為大家詳細(xì)介紹了Vue.js 合bootstrap實(shí)現(xiàn)分頁控件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03vite2打包的時(shí)候vendor-xxx.js文件過大的解決方法
vite2是一個(gè)非常好用的工具,只是隨著代碼的增多,打包的時(shí)候?vendor-xxxxxx.js?文件也越來越大,本文主要介紹了vite2打包的時(shí)候vendor-xxx.js文件過大的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03