vueJs函數(shù)readonly與shallowReadonly使用對比詳解
前言
在使用vue3開發(fā)項目時,對于一些特殊的需求,針對有些數(shù)據(jù)字段,在前端,只允許讀取,不允許修改,比如:有的網(wǎng)站用戶名,一旦注冊了,就不允許修改
當然,有時候,我們從別的地方引用數(shù)據(jù)過來,用作信息的展示,但是卻不允許修改,不希望影響源數(shù)據(jù)
那么readonly與shallowReadonly這兩個API就很有用了的
readonly
讓一個響應式數(shù)據(jù)變?yōu)橹蛔x的,接收一個響應式數(shù)據(jù),經(jīng)過readonly加工處理一下,那么新賦值的數(shù)據(jù)都不允許修改
接受一個對象 (不論是響應式還是普通的) 或是一個 ref,返回一個原值的只讀代理
頁面沒有更新有兩種情況
[1]. 數(shù)據(jù)修改了,但數(shù)據(jù)不是響應式,vue監(jiān)測不到
[2]. 數(shù)據(jù)壓根就沒有更改
const original = reactive({ count: 0 })
const copy = readonly(original)
// 更改源屬性會觸發(fā)其依賴的偵聽器
original.count++
// 更改該只讀副本將會失敗,并會得到一個警告,頁面數(shù)據(jù)不會更新
copy.count++ // warning!
使用readonly對響應式數(shù)據(jù)包裹處理一下后,則再次修改數(shù)據(jù)時,頁面數(shù)據(jù)不會更新
shallowreadonly
接收一個響應式數(shù)據(jù),經(jīng)過shallowreadonly的處理,變成一個只讀的,只考慮對象的第一層數(shù)據(jù),不可以修改,但是第一層嵌套里的深層數(shù)據(jù)卻支持修改
讓一個響應式數(shù)據(jù)變?yōu)橹蛔x能力(淺只讀)
應用場景: 不希望數(shù)據(jù)被修改,當數(shù)據(jù)是從別的地方取過來,不希望影響源數(shù)據(jù)
const state = shallowReadonly({
foo: 1,
nested: {
bar: 2
}
})
// 更改狀態(tài)自身的屬性會失敗,不可以修改
state.foo++
// ...但可以更改下層嵌套對象
isReadonly(state.nested) // false
// 這是可以通過的
state.nested.bar++
總結
readonly與shallowReadonly都是讓響應式數(shù)據(jù)只具備讀的能力,后者是淺層次的只讀,也就是只對數(shù)據(jù)對象第一層起作用,深層次的嵌套,當時用shallowReadonl()處理時,深層次數(shù)據(jù)支持被修改
在不希望數(shù)據(jù)被修改,或當數(shù)據(jù)是從別的地方取過來,不希望影響源數(shù)據(jù)時,使用readonly()或shallowReadonly()就很有用
至于數(shù)據(jù)能不能修改是由寫代碼的開發(fā)者決定的,也是由產品功能決定的,支不支持修改,可以控制數(shù)據(jù)是否能讀寫能力
以上就是vueJs函數(shù)readonly與shallowReadonly使用對比詳解的詳細內容,更多關于vue readonly shallowReadonly的資料請關注腳本之家其它相關文章!
相關文章
Vue項目保持element組件同行,設置組件不自動換行問題
這篇文章主要介紹了Vue項目保持element組件同行,設置組件不自動換行問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

