您好,登錄后才能下訂單哦!
這篇文章主要講解了“Vue3中的readonly特性及函數(shù)使用方法是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue3中的readonly特性及函數(shù)使用方法是什么”吧!
readonly
是Vue3中提供的一個新特性,用于將一個響應式對象變成只讀對象。使用readonly
可以確保一個對象只能被讀取而不能被修改,從而提高應用的穩(wěn)定性和安全性。
在Vue3中,可以使用readonly
函數(shù)將一個對象轉(zhuǎn)換為只讀對象,例如:
import { readonly } from 'vue' const state = readonly({ count: 0 })
在上面的代碼中,state
對象被轉(zhuǎn)換為只讀對象,這意味著state.count
屬性只能被讀取,而不能被修改。
需要注意的是,readonly
函數(shù)是遞歸的,也就是說,如果一個對象包含其他對象,那么這些對象也會被轉(zhuǎn)換為只讀對象。例如:
import { readonly } from 'vue' const state = readonly({ user: { name: 'John', age: 30 } })
在上面的代碼中,user
對象也被轉(zhuǎn)換為只讀對象,這意味著state.user.name
和state.user.age
屬性都只能被讀取,而不能被修改。
需要注意的是,readonly
函數(shù)只能將一個對象轉(zhuǎn)換為只讀對象,而不能將一個數(shù)組或Map等其他類型的數(shù)據(jù)結(jié)構轉(zhuǎn)換為只讀對象。如果需要將這些數(shù)據(jù)結(jié)構轉(zhuǎn)換為只讀對象,可以使用readonly
函數(shù)和deepReadonly
函數(shù)的組合。例如:
import { readonly, deepReadonly } from 'vue' const state = readonly({ items: deepReadonly([ { id: 1, name: 'item 1' }, { id: 2, name: 'item 2' }, { id: 3, name: 'item 3' } ]) })
在上面的代碼中,items
數(shù)組被轉(zhuǎn)換為只讀數(shù)組,其中的對象也被轉(zhuǎn)換為只讀對象,這意味著數(shù)組和對象都只能被讀取,而不能被修改。
undefined
vue3中的readonly單向數(shù)據(jù)流函數(shù),傳入一個對象(響應式或普通)或 ref,返回一個原始對象的只讀代理。一個只讀的代理是“深層的”,對象內(nèi)部任何嵌套的屬性也都是只讀的。
1、readonly函數(shù)是將通過ref 或reactive定義好的數(shù)據(jù)進行拷貝后變?yōu)閮H可讀的數(shù)據(jù),不可進行修改,即無響應
2、如強制修改 控制臺將會報錯警告
<template> <div> <img alt="Vue logo" src="./assets/logo.png" /> <h2>vue3.0 beta</h2> <h2>{{ original.count }} ----- {{ copy.count }}</h2> <button @click="add">add</button> </div> </template> <script> import { reactive, readonly, watchEffect } from "vue"; export default { setup() { const original = reactive({ count: 0 }); const copy = readonly(original); watchEffect(() => { // 依賴追蹤 console.log(copy.count); }); // original 上的修改會觸發(fā) copy 上的偵聽 original.count++; // 無法修改 copy 并會被警告 copy.count++; // warning! return { original, copy }; } }; </script>
可以看到觸發(fā)了只2次 "watchEffect" 函數(shù),因為 copy 是只讀的。
<template> <div> <img alt="Vue logo" src="./assets/logo.png" /> <h2>vue3.0 beta</h2> <h2>{{ refData }} ----- {{ copy }}</h2> </div> </template> <script> import { ref, readonly } from "vue"; export default { setup() { const refData = ref(0); const copy = readonly(refData); // 無法修改 copy 并會被警告 copy.value++; // warning! return { refData, copy }; } }; </script>
可以看到控制臺提示如下:
"Set operation on key "value" failed: target is readonly"
<template> <div> <img alt="Vue logo" src="./assets/logo.png" /> <h2>vue3.0 beta</h2> <h2>{{ original.count }} ----- {{ copy.count }}</h2> <button @click="add">add</button> </div> </template> <script> import { readonly, watchEffect } from "vue"; export default { setup() { const original = { count: 0 }; const copy = readonly(original); watchEffect(() => { // 依賴追蹤 console.log(copy.count); }); // original 上的修改會觸發(fā) copy 上的偵聽 original.count++; // 無法修改 copy 并會被警告 copy.count++; // warning! const add = () => { copy.count++; }; return { original, copy, add }; } }; </script>
可以看到我們一直點擊按鈕在++操作,控制臺會提示錯誤,然后界面也沒更新,因為你的數(shù)據(jù)源不是響應式的。
感謝各位的閱讀,以上就是“Vue3中的readonly特性及函數(shù)使用方法是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Vue3中的readonly特性及函數(shù)使用方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。