最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3?中的?readonly?特性及函數(shù)使用詳解

 更新時(shí)間:2023年04月27日 09:08:31   作者:ScriptMaster  
readonly是Vue3中提供的一個(gè)新特性,用于將一個(gè)響應(yīng)式對(duì)象變成只讀對(duì)象,這篇文章主要介紹了Vue3?中的?readonly?特性詳解,需要的朋友可以參考下

Vue3 中的 readonly 特性詳解

readonly是Vue3中提供的一個(gè)新特性,用于將一個(gè)響應(yīng)式對(duì)象變成只讀對(duì)象。使用readonly可以確保一個(gè)對(duì)象只能被讀取而不能被修改,從而提高應(yīng)用的穩(wěn)定性和安全性。

在Vue3中,可以使用readonly函數(shù)將一個(gè)對(duì)象轉(zhuǎn)換為只讀對(duì)象,例如:

import { readonly } from 'vue'
const state = readonly({
  count: 0
})

在上面的代碼中,state對(duì)象被轉(zhuǎn)換為只讀對(duì)象,這意味著state.count屬性只能被讀取,而不能被修改。

需要注意的是,readonly函數(shù)是遞歸的,也就是說(shuō),如果一個(gè)對(duì)象包含其他對(duì)象,那么這些對(duì)象也會(huì)被轉(zhuǎn)換為只讀對(duì)象。例如:

import { readonly } from 'vue'
const state = readonly({
  user: {
    name: 'John',
    age: 30
  }
})

在上面的代碼中,user對(duì)象也被轉(zhuǎn)換為只讀對(duì)象,這意味著state.user.namestate.user.age屬性都只能被讀取,而不能被修改。

需要注意的是,readonly函數(shù)只能將一個(gè)對(duì)象轉(zhuǎn)換為只讀對(duì)象,而不能將一個(gè)數(shù)組或Map等其他類型的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為只讀對(duì)象。如果需要將這些數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為只讀對(duì)象,可以使用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ù)組,其中的對(duì)象也被轉(zhuǎn)換為只讀對(duì)象,這意味著數(shù)組和對(duì)象都只能被讀取,而不能被修改。

補(bǔ)充:vue3中的readonly單向數(shù)據(jù)流函數(shù)(readonly函數(shù)使用詳解)

vue3中的readonly單向數(shù)據(jù)流函數(shù),傳入一個(gè)對(duì)象(響應(yīng)式或普通)或 ref,返回一個(gè)原始對(duì)象的只讀代理。一個(gè)只讀的代理是“深層的”,對(duì)象內(nèi)部任何嵌套的屬性也都是只讀的。

一、注意:

1、readonly函數(shù)是將通過(guò)ref 或reactive定義好的數(shù)據(jù)進(jìn)行拷貝后變?yōu)閮H可讀的數(shù)據(jù),不可進(jìn)行修改,即無(wú)響應(yīng)

2、如強(qiáng)制修改 控制臺(tái)將會(huì)報(bào)錯(cuò)警告

二、reactive 和 readonly

<template>
  <div>
    <img alt="Vue logo" src="./assets/logo.png" />
    <h1>vue3.0 beta</h1>
    <h1>{{ original.count }} ----- {{ copy.count }}</h1>
    <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 上的修改會(huì)觸發(fā) copy 上的偵聽
    original.count++;
    // 無(wú)法修改 copy 并會(huì)被警告
    copy.count++; // warning!
    return {
      original,
      copy
    };
  }
};
</script>

可以看到觸發(fā)了只2次 "watchEffect" 函數(shù),因?yàn)?copy 是只讀的。

三、ref 和 readonly

<template>
  <div>
    <img alt="Vue logo" src="./assets/logo.png" />
    <h1>vue3.0 beta</h1>
    <h1>{{ refData }} ----- {{ copy }}</h1>
  </div>
</template>
<script>
import { ref, readonly } from "vue";
export default {
  setup() {
    const refData = ref(0);
    const copy = readonly(refData);
    // 無(wú)法修改 copy 并會(huì)被警告
   copy.value++; // warning!
    return {
      refData,
      copy
    };
  }
};
</script>

可以看到控制臺(tái)提示如下:

"Set operation on key "value" failed: target is readonly"

四、Object普通對(duì)象 和 readonly

<template>
  <div>
    <img alt="Vue logo" src="./assets/logo.png" />
    <h1>vue3.0 beta</h1>
    <h1>{{ original.count }} ----- {{ copy.count }}</h1>
    <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 上的修改會(huì)觸發(fā) copy 上的偵聽
    original.count++;
    // 無(wú)法修改 copy 并會(huì)被警告
    copy.count++; // warning!
    const add = () => {
      copy.count++;
    };
    return {
      original,
      copy,
      add
    };
  }
};
</script>

可以看到我們一直點(diǎn)擊按鈕在++操作,控制臺(tái)會(huì)提示錯(cuò)誤,然后界面也沒(méi)更新,因?yàn)槟愕臄?shù)據(jù)源不是響應(yīng)式的。

到此這篇關(guān)于Vue3 中的 readonly 特性詳解的文章就介紹到這了,更多相關(guān)Vue3   readonly內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue 動(dòng)態(tài)表單開發(fā)方法案例詳解

    vue 動(dòng)態(tài)表單開發(fā)方法案例詳解

    這篇文章主要介紹了vue 動(dòng)態(tài)表單開發(fā)方法,結(jié)合具體案例形式詳細(xì)分析了vue.js動(dòng)態(tài)表單相關(guān)原理、開發(fā)步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • 基于vue監(jiān)聽滾動(dòng)事件實(shí)現(xiàn)錨點(diǎn)鏈接平滑滾動(dòng)的方法

    基于vue監(jiān)聽滾動(dòng)事件實(shí)現(xiàn)錨點(diǎn)鏈接平滑滾動(dòng)的方法

    本篇文章主要介紹了基于vue監(jiān)聽滾動(dòng)事件實(shí)現(xiàn)錨點(diǎn)鏈接平滑滾動(dòng)的方法,非常具有實(shí)用價(jià)值,有興趣的可以了解一下
    2018-01-01
  • element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)

    element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)

    在項(xiàng)目中,經(jīng)常會(huì)遇到表單檢驗(yàn),在這里我分享在實(shí)際項(xiàng)目中遇到多個(gè)表單同時(shí)進(jìn)行校驗(yàn)以及我的解決方法,感興趣的可以了解一下
    2021-05-05
  • Vue Element-UI中el-table實(shí)現(xiàn)單選的示例代碼

    Vue Element-UI中el-table實(shí)現(xiàn)單選的示例代碼

    在element-ui中是為我們準(zhǔn)備好了可直接使用的單選與多選屬性的,本文主要介紹了Vue Element-UI中el-table實(shí)現(xiàn)單選的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Vue.js條件渲染和列表渲染以及Vue中key值的內(nèi)部原理

    Vue.js條件渲染和列表渲染以及Vue中key值的內(nèi)部原理

    這篇文章主要介紹了Vue.js條件渲染和列表渲染,以及Vue中key值的內(nèi)部原理,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • vue+el-table點(diǎn)擊表頭實(shí)現(xiàn)改變其當(dāng)前樣式

    vue+el-table點(diǎn)擊表頭實(shí)現(xiàn)改變其當(dāng)前樣式

    這篇文章主要介紹了vue+el-table點(diǎn)擊表頭實(shí)現(xiàn)改變其當(dāng)前樣式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 最新評(píng)論

    灌阳县| 宿迁市| 汝阳县| 江川县| 板桥市| 萨嘎县| 农安县| 那曲县| 深水埗区| 肥乡县| 高邑县| 正定县| 彰化县| 民勤县| 廉江市| 洛阳市| 北票市| 海门市| 平湖市| 云龙县| 宁波市| 濉溪县| 化德县| 醴陵市| 成武县| 休宁县| 安宁市| 长海县| 阿克陶县| 逊克县| 安宁市| 额济纳旗| 三台县| 邯郸市| 赞皇县| 达尔| 武胜县| 二手房| 芷江| 马鞍山市| 漯河市|