国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

這篇具有很好參考價(jià)值的文章主要介紹了Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

toRef和toRefs

toRef

App.vue

<template>
  <button @click="toggle=!toggle">切換顯示/隱藏</button>
  <Demo v-if="toggle"></Demo>
</template>

<script>
import {ref} from 'vue'
import Demo from "@/components/Demo";
export default {
  name: 'App',
  components: {Demo},
  setup(){
    const toggle=ref(true)
    return{toggle}
  },
}
</script>

Demo.vue

<template>
  <h2>個(gè)人信息</h2>
  <h2>姓名:{{name}}</h2>
  <h2>年齡:{{age}}</h2>
  <h2>薪資:{{salary}}K</h2>
  <button @click="name+='~'">修改姓名</button>
  <button @click="age++">增加年齡</button>
  <button @click="salary++">漲薪</button>
</template>

<script>
import {reactive,toRef} from 'vue'
export default {
  name: "Demo",
  setup(){
    //數(shù)據(jù)
    let person=reactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })

    const name1=person.name
    console.log("person.name",name1)  //輸出只是字符串
    const name2=toRef(person,'name')
    console.log("toRef(person,'name')",name2)    //輸出指向是person的name屬性的ref對(duì)象

    //返回一個(gè)對(duì)象(常用)
    return{
      name:toRef(person,'name'),
      age:toRef(person,'age'),
      salary:toRef(person.job.j1,'salary')
    }
  },
}
</script>

<style scoped>

</style>

Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

原理:
Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

toRefs

App.vue

<template>
  <button @click="toggle=!toggle">切換顯示/隱藏</button>
  <Demo v-if="toggle"></Demo>
  <hr>
  <DemoTwo></DemoTwo>
</template>

<script>
import {ref} from 'vue'
import Demo from "@/components/Demo";
import DemoTwo from "@/components/DemoTwo";

export default {
  name: 'App',
  components: {DemoTwo, Demo},
  setup(){
    const toggle=ref(true)
    return{toggle}
  },
}
</script>

DemoTwo.vue

<template>
  <h2>個(gè)人信息</h2>
  <h2>姓名:{{name}}</h2>
  <h2>年齡:{{age}}</h2>
  <h2>薪資:{{job.j1.salary}}K</h2>
  <button @click="name+='~'">修改姓名</button>
  <button @click="age++">增加年齡</button>
  <button @click="job.j1.salary++">漲薪</button>
</template>

<script>
import {reactive,toRefs} from 'vue'
export default {
  name: "Demo",
  setup(){
    //數(shù)據(jù)
    let person=reactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })


    console.log("-------------------------------------")
    const x=toRefs(person)
    console.log("toRefs(person)",x)

    //返回一個(gè)對(duì)象(常用)
    return{
      //toRefs返回的是一個(gè)對(duì)象,所以不能直接對(duì)象包對(duì)象,應(yīng)該將兩個(gè)對(duì)象合并
      ...toRefs(person)
    }
  },
}
</script>

<style scoped>

</style>

Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

總結(jié)

  1. 作用:創(chuàng)建一個(gè)ref對(duì)象,其value值指向另一個(gè)對(duì)象中的某個(gè)屬性
  2. 語(yǔ)法:const name=toRef(person,‘name’)
  3. 應(yīng)用:要將響應(yīng)式對(duì)象中的某個(gè)屬性單獨(dú)提供給外部使用時(shí)
  4. 擴(kuò)展:toRefstoRef功能一致,但可以批量創(chuàng)建多個(gè)ref 對(duì)象,語(yǔ)法:toRefs(person)

shallowReactive與shallowRef

shallowReactive

App.vue

<template>
  <button @click="toggle=!toggle">切換顯示/隱藏</button>
  <Demo v-if="toggle"></Demo>
</template>

<script>
import {ref} from 'vue'
import Demo from "@/components/Demo";

export default {
  name: 'App',
  components: {Demo},
  setup(){
    const toggle=ref(true)
    return{toggle}
  },
}
</script>

Demo.vue

<template>
  <h2>個(gè)人信息</h2>
  <h2>姓名:{{name}}</h2>
  <h2>年齡:{{age}}</h2>
  <h2>薪資:{{job.j1.salary}}K</h2>
  <button @click="name+='~'">修改姓名</button>
  <button @click="age++">增加年齡</button>
  <button @click="job.j1.salary++">漲薪</button>
</template>

<script>
import {reactive,toRefs,shallowReactive} from 'vue'
export default {
  name: "Demo",
  setup(){
    //數(shù)據(jù)
    /*let person=reactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })*/

	//只考慮第一層數(shù)據(jù)的響應(yīng)式
    let person=shallowReactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })

    //返回一個(gè)對(duì)象(常用)
    return{
      ...toRefs(person)
    }
  },
}
</script>

<style scoped>

</style>

Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

shallowRef

Demo.vue

<template>
  <h2>當(dāng)前的x值是:{{x}}</h2>
  <button @click="x++">給x++</button>
  <h2>當(dāng)前的a.b的值是:{{a.b}}</h2>
  <button @click="a.b++">給a.b的值++</button>
  <hr>
  <h2>個(gè)人信息</h2>
  <h2>姓名:{{name}}</h2>
  <h2>年齡:{{age}}</h2>
  <h2>薪資:{{job.j1.salary}}K</h2>
  <button @click="name+='~'">修改姓名</button>
  <button @click="age++">增加年齡</button>
  <button @click="job.j1.salary++">漲薪</button>
</template>

<script>
import {reactive,toRefs,shallowReactive,shallowRef} from 'vue'
export default {
  name: "Demo",
  setup(){
    //數(shù)據(jù)
    /*let person=reactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })*/

    //只考慮第一層數(shù)據(jù)的響應(yīng)式
    let person=shallowReactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })

    const x=shallowRef(0)
    const a=shallowRef({
      b:0
    })
    console.log("x",x)
    console.log("a",a)


    //返回一個(gè)對(duì)象(常用)
    return{
      x,
      a,
      ...toRefs(person)
    }
  },
}
</script>

<style scoped>

</style>

Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

總結(jié)

  1. shallowReactive:只處理對(duì)象最外層屬性的響應(yīng)式(淺響應(yīng)式)
  2. shallowRef:只處理基本數(shù)據(jù)類型的響應(yīng)式,不進(jìn)行對(duì)象的響應(yīng)式處理
  3. 什么時(shí)候使用?
    (1)如果有一個(gè)對(duì)象數(shù)據(jù),結(jié)構(gòu)比較深,但變化時(shí)只是外層屬性變化 ===> shallowReactive
    (2)如果有一個(gè)對(duì)象數(shù)據(jù),后續(xù)功能不會(huì)修改該對(duì)象中的屬性,而是生新的對(duì)象來替換 ===>shallowRef

readonly與shallowReadonly

App.vue

<template>
  <button @click="toggle=!toggle">切換顯示/隱藏</button>
  <Demo v-if="toggle"></Demo>
  <hr>
  <br>
  <br>
  <DemoTwo></DemoTwo>
</template>

<script>
import {ref} from 'vue'
import Demo from "@/components/Demo";
import DemoTwo from "@/components/DemoTwo";

export default {
  name: 'App',
  components: {Demo,DemoTwo},
  setup(){
    const toggle=ref(true)
    return{toggle}
  },
}
</script>

Demo.vue

<template>
  <h2>當(dāng)前求和為:{{sum}}</h2>
  <button @click="sum++">點(diǎn)我和++</button>
  <hr>
  <h2>個(gè)人信息</h2>
  <h2>姓名:{{name}}</h2>
  <h2>年齡:{{age}}</h2>
  <h2>薪資:{{job.j1.salary}}K</h2>
  <button @click="name+='~'">修改姓名</button>
  <button @click="age++">增加年齡</button>
  <button @click="job.j1.salary++">漲薪</button>
</template>

<script>
import {reactive, toRefs,ref,readonly} from 'vue'
export default {
  name: "Demo",
  setup(){
    //數(shù)據(jù)
    let sum=ref(0)
    let person=reactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })

    person=readonly(person)
    sum=readonly(sum)


    //返回一個(gè)對(duì)象(常用)
    return{
      sum,
      ...toRefs(person)
    }
  },
}
</script>

<style scoped>

</style>

DemoTwo.vue

<template>
  <h2>當(dāng)前求和為:{{sum}}</h2>
  <button @click="sum++">點(diǎn)我和++</button>
  <hr>
  <h2>個(gè)人信息</h2>
  <h2>姓名:{{name}}</h2>
  <h2>年齡:{{age}}</h2>
  <h2>薪資:{{job.j1.salary}}K</h2>
  <button @click="name+='~'">修改姓名</button>
  <button @click="age++">增加年齡</button>
  <button @click="job.j1.salary++">漲薪</button>
</template>

<script>
import {reactive, toRefs,ref,shallowReadonly} from 'vue'
export default {
  name: "Demo",
  setup(){
    //數(shù)據(jù)
    let sum=ref(0)
    let person=reactive({
      name:'張三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })

    person=shallowReadonly(person)


    //返回一個(gè)對(duì)象(常用)
    return{
      sum,
      ...toRefs(person)
    }
  },
}
</script>

<style scoped>

</style>

Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly文章來源地址http://www.zghlxwxcb.cn/news/detail-423780.html

總結(jié)

  1. readonly:讓一個(gè)響應(yīng)式數(shù)據(jù)變?yōu)橹蛔x的(深只讀)
  2. shallowReadonly:讓一個(gè)響應(yīng)式數(shù)據(jù)變?yōu)橹蛔x的(淺只讀)
  3. 應(yīng)用場(chǎng)景:不希望數(shù)據(jù)被修改時(shí)

到了這里,關(guān)于Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue3快速上手(八) toRefs和toRef的用法

    Vue3快速上手(八) toRefs和toRef的用法

    顧名思義,toRef 就是將其轉(zhuǎn)換為ref的一種實(shí)現(xiàn)。詳細(xì)請(qǐng)看: toRef就相當(dāng)于是將對(duì)象Person里的某個(gè)屬性,如name,單獨(dú)解構(gòu)賦值給name,并使得name同為響應(yīng)式對(duì)象。且修改name的值時(shí),person.name的值隨之變化。 如下圖可以看到: 1、name是一個(gè)ObjectRefImpl對(duì)象的實(shí)例。 2、底層還是個(gè)P

    2024年02月19日
    瀏覽(25)
  • 搞懂 Vue3 中的各種 ref:toRef,toRefs,isRef,unref...

    搞懂 Vue3 中的各種 ref:toRef,toRefs,isRef,unref...

    在 Vue3 中,有許多與響應(yīng)式相關(guān)的函數(shù),例如 toRef、toRefs、isRef、unref 等等。合理地使用這些函數(shù)可以在實(shí)際開發(fā)中大大提高效率。本文將詳細(xì)介紹這些函數(shù)的用法,讓我們?cè)趯?shí)際開發(fā)中知道應(yīng)該使用哪些 API 并能夠熟練地回答面試官的相關(guān)問題。 大家對(duì)于 ref 這個(gè) API 肯定都

    2024年02月12日
    瀏覽(16)
  • vue3 toRefs詳解

    toRefs函數(shù)的作用是將響應(yīng)式對(duì)象中的所有屬性轉(zhuǎn)換為單獨(dú)的響應(yīng)式數(shù)據(jù),對(duì)象成為普通對(duì)象,并且值是關(guān)聯(lián)的。在這個(gè)過程中toRefs會(huì)做以下兩件事: 把一個(gè)響應(yīng)式對(duì)象轉(zhuǎn)換成普通對(duì)象 對(duì)該普通對(duì)象的每個(gè)屬性都做一次ref操作,這樣每個(gè)屬性都是響應(yīng)式的 說明: reactive 對(duì)象取

    2024年02月12日
    瀏覽(17)
  • Vue3中 toRefs的基本使用

    什么是toRefs? 把一個(gè)響應(yīng)式對(duì)象轉(zhuǎn)換成普通對(duì)象,該普通對(duì)象的每個(gè) property 都是一個(gè) ref; 理解一下: 期望: 頁(yè)面上展示 “小明=========…”; 實(shí)際:頁(yè)面展示\\\"小明\\\",myData中name 無(wú)法響應(yīng)。 解決: 通過toRefs的方式,將一個(gè)響應(yīng)式 reactive 對(duì)象的所有原始屬性轉(zhuǎn)換為響應(yīng)式的

    2024年02月11日
    瀏覽(17)
  • 助你絲滑過度到 Vue3 生命&自定義hook&toRef ②⑥

    助你絲滑過度到 Vue3 生命&自定義hook&toRef ②⑥

    @作者 : SYFStrive ? @博客首頁(yè) : HomePage ??: VUE3~TS ??: 個(gè)人社區(qū)(歡迎大佬們加入) ??: 社區(qū)鏈接?? ??: 覺得文章不錯(cuò)可以點(diǎn)點(diǎn)關(guān)注 ??: 專欄連接?? ?? TypeScript (??) ?? 微信小程序 (??) ?? UNIAPP開發(fā) (??) 提示:以下是本篇文章正文內(nèi)容 簡(jiǎn)介 : 2020年9月

    2024年02月15日
    瀏覽(23)
  • 【vue3】vue3的三種寫法(附帶provide/inject、toRefs說明、ref,reactive的區(qū)別)

    【vue3】vue3的三種寫法(附帶provide/inject、toRefs說明、ref,reactive的區(qū)別)

    寫法一(vue3的寫法) toRefs定義: toRefs可以將對(duì)象(只能接收rective對(duì)象)中的屬性變成響應(yīng)式。 正常reactive對(duì)象數(shù)據(jù)也是響應(yīng)式的,如果用toRefs解構(gòu)出去會(huì)更加方便。 toRefs什么時(shí)候用? 數(shù)據(jù)量如果很多, 我們一般會(huì)用解構(gòu)來簡(jiǎn)化代碼, 那么在vue3 中如果使用對(duì)象的解構(gòu),

    2024年02月13日
    瀏覽(25)
  • vue全家桶進(jìn)階之路31:Vue3 數(shù)據(jù)和方法的雙向綁定ref、reactive、toRefs

    ref 在 Vue 3 中,你可以使用 setup 函數(shù)來定義組件的數(shù)據(jù)和方法。在 setup 函數(shù)中,你可以使用 ref 、 reactive 和 computed 等 Vue 3 的響應(yīng)式 API 來定義數(shù)據(jù),并返回一個(gè)包含你需要公開的數(shù)據(jù)和方法的對(duì)象。下面是一個(gè)例子: 在這個(gè)例子中,我們使用 ref 函數(shù)來定義了一個(gè)名為 mes

    2023年04月19日
    瀏覽(26)
  • Vue 2 和 Vue 3 中 toRefs的區(qū)別

    摘要:本文將介紹 Vue 2 和 Vue 3 中 toRefs 函數(shù)的不同用法和行為,并解釋其在各個(gè)版本中的作用。 正文: Vue 是一款流行的 JavaScript 框架,用于構(gòu)建用戶界面。在 Vue 2 和 Vue 3 中,都存在一個(gè)名為 toRefs 的函數(shù),但其行為在這兩個(gè)版本中有所不同。 在 Vue 2 中,使用 Composition A

    2024年02月15日
    瀏覽(14)
  • ref、reactive、toRef、toRefs

    ref 作用:定義一個(gè)響應(yīng)式數(shù)據(jù) 語(yǔ)法:const xxx = ref(initValue) 創(chuàng)建一個(gè)包含響應(yīng)式數(shù)據(jù)的引用對(duì)象 js中操作數(shù)據(jù):xxx.value 模板中讀取數(shù)據(jù):不需要.value,直接div{{xxx}}/div 接收的數(shù)據(jù):基本類型、對(duì)象類型 基本類型的數(shù)據(jù):響應(yīng)式是靠object.defineProperty()的get與set完成的 對(duì)象類型的

    2024年02月08日
    瀏覽(19)
  • vue3動(dòng)態(tài)組件組件shallowRef包裹問題

    在vue3做tabs切換功能的時(shí)候,如果導(dǎo)入的組件不適用shallowRef包裹會(huì)顯示下面的警告: 根據(jù)提示代碼修改如下: 就能解決上面的問題。

    2024年02月22日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包