成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue3 學習筆記 —Vue3 的Setup 如何實現響應式功能?

開發 前端
setup 是用來寫組合式 api ,內部的數據和方法需要通過 return 之后,模板才能使用。接下來就看看setup如何實現data的響應式功能?

[[437987]]

setup 是用來寫組合式 api ,內部的數據和方法需要通過 return 之后,模板才能使用。在之前 vue2 中,data 返回的數據,可以直接進行雙向綁定使用,如果我們把 setup 中數據類型直接雙向綁定,發現變量并不能實時響應。接下來就看看setup如何實現data的響應式功能?

一、ref

setup 內的自定義屬性不具備響應式能力,所以引入了 ref ,ref 底層通過代理,把屬性包裝值包裝成一個 proxy ,proxy 內部是一個對象,使得基礎類型的數據具備響應式能力,使用之前必須引入。

示例1:ref 使用

  1. <template> 
  2.  <div> 
  3.   <input type="text" v-model="mood"
  4.   {{mood}} 
  5.  </div> 
  6. </template> 
  7. <script> 
  8. import { ref } from "vue" 
  9. export default
  10.  setup(){ 
  11.   let mood = ref("此時心情好差呀!"
  12.   setTimeout(()=>{ 
  13.    mood.value = "心情要變的像人一樣美" 
  14.   },3000) 
  15.   return
  16.    mood 
  17.   } 
  18.  } 
  19. </script> 

此時可以在 setup 模板內任意編輯 mood,可以保證實時響應。實例在修改 mood 的值加了 value ,是因為 ref 的工作原來:

let mood = ref("此時心情好差呀!")

修改成 :let mood = proxy({value:"此時心情好差呀!"})

二、reactive

上述的 ref 讓基礎數據類型具備了響應式,但是如果我們換成引用類型的數據,就會失效。所以引入了 reactive。

reactive 通過底層包裝,將引用類型數據包裝到 proxy 內,使用原理如:

  1. let me = reactive({ 
  2.  single:true
  3.  want:"暖的像火爐的暖男" 
  4. }) 
  5.  
  6. // 運行結果為 
  7. let me = proxy : { single: true, want:"暖的像火爐的暖男" } 

 引用的時候,直接使用 me.want 就可以了。

示例2:reactive 使用

  1. <template> 
  2.  <div> 
  3.   {{me.want}} 
  4.  </div> 
  5. </template> 
  6. <script> 
  7. import { ref , reactive } from "vue" 
  8. export default
  9.  setup(){ 
  10.   let me = reactive({ 
  11.    single:true
  12.    want:"暖的像火爐的暖男" 
  13.   }) 
  14.   setTimeout(()=>{ 
  15.    me.want = "夏天容易化了" 
  16.   },3000) 
  17.   return
  18.    me 
  19.   } 
  20.  } 
  21. </script> 

通過 setup + ref + reactive 就可以完全實現 vue2 中 data 的響應式功能,所以 setup 完全可以替換掉 data。

三、toRefs 、toRef 應用

setup + ref + reactive 實現了數據響應式,不能使用 ES6 解構,會消除響應特性。所以需要 toRefs 解構,使用時,需要先引入。

它的工作原理為:

  1. import { ref , reactive, toRefs } from "vue" 
  2. let me = reactive({ 
  3.  single:true
  4.  want:"暖的像火爐的暖男" 
  5. }) 
  6. //運行為 
  7. let me = proxy : { single: true, want:"暖的像火爐的暖男" } 
  8.  
  9. const { single, want } = toRefs( me ) 
  10. // 運行為 
  11. single : proxy({ value:true }) 
  12. want : proxy({ value:"暖的像火爐的暖男" }) 

 toRefs 把 single 和 want 解構成兩個 proxy ,所以是響應式的。

示例3:toRefs 解構數據

  1. <template> 
  2.  <div> 
  3.   {{want}} 
  4.   <input type="text" v-model="want"
  5.  </div> 
  6. </template> 
  7. <script> 
  8. import { ref , reactive, toRefs } from "vue" 
  9. export default
  10.  setup(){ 
  11.   let me = reactive({ 
  12.    single:true
  13.    want:"暖的像火爐的暖男" 
  14.   }) 
  15.   setTimeout(()=>{ 
  16.    me.want = "夏天容易化了" 
  17.   },3000) 
  18.   // 解構 
  19.   const {single,want} = toRefs(me) 
  20.    return
  21.     single, 
  22.     want 
  23.    } 
  24.   } 
  25. </script> 

toRef作用:將對象某一個屬性,作為引用返回。比較難理解,可以打印查看下結果更容易理解。

  1. let me = reactive({ 
  2.  single:true
  3.  want:"暖的像火爐的暖男" 
  4. }) 
  5. let lv = toRef( me, 'love' ) 
  6. console.log('love',love); 
  7. //打印結果 
  8. ObjectRefImpl { 
  9.  __v_isRef: true 
  10.  _key: "love" 
  11.  _object: Proxy {single: true, want: "暖的像火爐的暖男"
  12.  value: undefined 
  13.  [[Prototype]]: Object 
  14.  

toRef 是組件之間進行傳值值,對可選參數進行處理,運行時,先查看 me中是否存在 love ,如果存在時就繼承 me 中的 love ,如果不存在時就創建一個 love ,然后解構賦值給變量 lv。

示例4:toRef 使用

  1. <template> 
  2.  <div> 
  3.   {{want}} 
  4.  <input type="text" v-model="want"
  5. </div> 
  6. </template> 
  7. <script> 
  8. import { ref , reactive, toRefs, toRef } from "vue" 
  9. export default
  10.  setup(){ 
  11.   let me = reactive({ 
  12.    single:true
  13.    want:"暖的像火爐的暖男" 
  14.   }) 
  15.  setTimeout(()=>{ 
  16.   me.want = "夏天容易化了" 
  17.  },3000) 
  18.  const {single,want } = toRefs(me) 
  19.  const love = toRef(me,'love'
  20.  console.log('love',love); 
  21.  return
  22.   single, 
  23.   want 
  24.   } 
  25.  } 
  26. </script> 

四、總結

ref 讓基礎數據類型具備響應式,而 reactive 讓引用類型的數據具備響應式。setup + ref + reactive 完全實現 vue2 中 data 響應式功能。

toRefs 解構 reactive 包裝的數據,toRef 用于對可選參數。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-12-01 08:11:44

Vue3 插件Vue應用

2023-11-28 09:03:59

Vue.jsJavaScript

2021-11-30 08:19:43

Vue3 插件Vue應用

2023-12-06 07:43:56

Vue如何定義事件

2022-06-26 00:00:02

Vue3響應式系統

2021-11-16 08:50:29

Vue3 插件Vue應用

2021-12-08 09:09:33

Vue 3 Computed Vue2

2021-12-29 07:51:21

Vue3 插件Vue應用

2023-12-11 07:34:37

Computed計算屬性Vue3

2021-09-27 06:29:47

Vue3 響應式原理Vue應用

2022-01-19 18:05:47

Vue3前端代碼

2022-02-18 09:39:51

Vue3.0Vue2.0Script Set

2023-12-14 08:25:14

WatchVue.js監聽數據

2024-01-23 09:15:33

Vue3組件拖拽組件內容編輯

2023-02-06 08:39:01

PreactVue3響應式

2023-04-27 11:07:24

Setup語法糖Vue3

2020-09-19 21:15:26

Composition

2021-11-17 08:24:47

Vue3 插件Vue應用

2022-03-10 11:04:04

Vue3Canvas前端

2021-12-15 08:23:42

Vue3 插件Vue應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人性视频免费网站 | 不卡在线视频 | 亚洲天堂男人的天堂 | 免费v片 | 午夜在线小视频 | 久久99精品视频 | 国产精品区二区三区日本 | 手机看片169| 91观看 | 国产精品18久久久久久白浆动漫 | 91久久久久久久 | 91热在线 | 午夜欧美一区二区三区在线播放 | 日韩欧美国产精品一区二区 | 福利av在线| 四虎影院新地址 | 亚洲精品 在线播放 | 婷婷精品 | 国产欧美日韩在线观看 | 欧美成人精品一区二区三区 | 一级特黄色毛片 | 伊人精品在线 | 一本岛道一二三不卡区 | 亚洲精品国产成人 | 一区二区久久 | 日韩免费一区二区 | 国产精品久久久久一区二区三区 | 亚洲视频一区二区三区 | 91一区二区 | 亚洲综合色丁香婷婷六月图片 | 日韩2020狼一二三 | 网站黄色av | 欧美精品成人一区二区三区四区 | 日韩毛片在线免费观看 | www.99热这里只有精品 | 日韩欧美精品在线 | 国产精品久久久久久高潮 | 性欧美精品一区二区三区在线播放 | 日本激情视频在线播放 | 亚洲免费精品一区 | 国产精品永久免费视频 |