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

Vue3中的ref為何要用.value進行值的調用呢

 更新時間:2022年09月14日 10:07:47   作者:ciarlatani  
這篇文章主要介紹了Vue3中的ref為何要用.value進行值的調用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Vue3中ref為何要用.value進行值的調用

在Vue2中,所有的數據都通過一個Data進行統(tǒng)一的返回,并且在data中對某個組件要用的數據進行統(tǒng)一的管理,常見的使用形式是這樣的:

<template>
? <div class="div">
? ? <todos :Obj="tos" :removeObj="removeObj"></todos>
? </div>
</template>
<script>
import search from '@/components/search'
import todos from '@/components/todos'
import all from '@/components/all'
export default {
? name: 'App',
? data () {
? ? return {
? ? ? tos: [
? ? ? ? { id: '001', value: '第一個', done: true },
? ? ? ? { id: '002', value: '第二個', done: true },
? ? ? ? { id: '003', value: '第三個', done: false },
? ? ? ? { id: '004', value: '第四個', done: true },
? ? ? ],
? ? }
? },
? computed: { },
? components: {
? ? search, todos, all,
? },
? methods: {
? ? removeObj (obj) {
? ? ? console.log(obj.id)
? ? ? this.tos = this.tos.filter(item => item.id !== obj.id)
? ? ? console.log(this.tos)
? ? },
? },
}
</script>
<style scoped>
// 樣式
</style>

可以看出來這里定義的內容都在一個數組中進行,或者是一個函數,將要使用的數據返回出來,這里無論怎么進行操作處理,最終進行數據代理的時候得到的都是一個對象,Vue2中直接通過defineProperty進行處理,并綁定對應的監(jiān)聽事件進行響應式的處理。

而Vue3中,數據的定義可以是單獨的,Vue可以讓我們隨時需要隨時定義,這也就帶來了另一個問題,我需要的一個數據可能不是對象

<script lang="ts" setup>
let str = ref('響應式字符串')
let obj = reactive({
? name: '張三',
? age: 10,
})
</script>

如果要定義的數據不是對象,還需要代理會怎么樣?

在Vue2中數據的定義都在對象中統(tǒng)一進行,也就不會出現這種情況,如果一定要代理一個單獨的數據呢?

Vue2中的數據代理通過defineProperty進行實現,也就是說我們要讓defineProperty代理一個普通的數據,而不是一個對象,在defineProperty的MDN的文檔中是這樣定義的:

  • Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性,并返回此對象。

通過這個可以明確看出,只能進行對象的代理,不能進行普通數據的代理,如果使用普通數據類型會直接報以下錯誤[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-p1Lm0OSJ-1661407967498)(Vue3中的ref為何要用.value進行值的調用?.assets/image-20220825094409254.png)]

? 在Vue3中數據代理可以使用單一數據了,并且也改進了數據代理的方式,使用的是Peoxy完成了數據代理,而MDN中對Proxy也進行了定義:

  • Proxy 對象用于創(chuàng)建一個對象的代理,從而實現基本操作的攔截和自定義(如屬性查找、賦值、枚舉、函數調用等)。

可以看出,Proxy依然是為對象服務,而不是普通的內容,這樣問題似乎就解決了

本操作的攔截和自定義(如屬性查找、賦值、枚舉、函數調用等)。

可以看出,Proxy依然是為對象服務,而不是普通的內容,這樣問題似乎就解決了

即使是Vue3中使用的Proxy的代理方式也不能進行普通數據的代理,所以當調用Ref的時候其實仍然創(chuàng)建了一個Proxy對象,并且Vue幫你給這個對象了一個value屬性,屬性值就是你定義的內容,改變的時候監(jiān)視的改變依然是通過Proxy的數據劫持來進行響應式的處理,而模板中使用的時候Vue會默認調用對應的value屬性,從而完成模板中的內容的直接調用 

Vue3 ref告別.value

眾所周知,ref要求我們訪問變量時需要加上.value,這讓很多開發(fā)者覺得難受.

let count = ref(1)
const add = () => {
? count.value += 1
}

后來vue3 提了一個 Ref Sugar 的 RFC,即 ref 語法糖,在ref前加上$,目前還處理實驗階段。

Ref 語法糖在項目中的使用

1. 該功能默認關閉,需要手動開啟。

// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
? plugins: [
? ? vue({
? ? ? refTransform: true // 開啟ref轉換
? ? })
? ]
})

2. 在.vue文件中使用

<template>
?? ?<div>{{count}}</div>
?? ?<button @click="add">click me</button>
</template>
<script setup>
let count = $ref(1)
const add = () => {
?? ?count++
}
</script>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • Vue實現讓頁面加載時請求后臺接口數據

    Vue實現讓頁面加載時請求后臺接口數據

    這篇文章主要介紹了Vue實現讓頁面加載時請求后臺接口數據
    2022-08-08
  • vue.js項目使用原生js實現移動端的輪播圖

    vue.js項目使用原生js實現移動端的輪播圖

    這篇文章主要為大家介紹了vue.js項目中使用原生js實現移動端的輪播圖,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Vue自定義指令使用方法詳解

    Vue自定義指令使用方法詳解

    這篇文章主要為大家詳細介紹了Vue自定義指令的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Vue項目中對index.html中BASE_URL的配置方式

    Vue項目中對index.html中BASE_URL的配置方式

    這篇文章主要介紹了Vue項目中對index.html中BASE_URL的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue.js項目nginx部署教程

    vue.js項目nginx部署教程

    nginx是一個高性能的HTTP和反向代理服務器。這篇文章主要介紹了vue.js項目nginx部署,需要的朋友可以參考下
    2018-04-04
  • vue組件之間的數據傳遞方法詳解

    vue組件之間的數據傳遞方法詳解

    這篇文章主要介紹了vue組件之間的數據傳遞方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Vue2與Vue3兄弟組件通訊bus的區(qū)別及用法

    Vue2與Vue3兄弟組件通訊bus的區(qū)別及用法

    這篇文章主要介紹了Vue2與Vue3兄弟組件通訊bus的區(qū)別及用法,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進步早日升職加薪
    2021-09-09
  • vue實現組件值的累加

    vue實現組件值的累加

    這篇文章主要為大家詳細介紹了vue實現組件值的累加,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 關于vue-cli 3配置打包優(yōu)化要點(推薦)

    關于vue-cli 3配置打包優(yōu)化要點(推薦)

    這篇文章主要介紹了vue-cli 3配置打包優(yōu)化要點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • vue3中如何使用Pinia實現數據持久化操作

    vue3中如何使用Pinia實現數據持久化操作

    使用vue3中的pinia,我們可以在多個頁面間共享數據,但是一旦我們關閉或刷新頁面,這些數據就會丟失,因此,我們需要有一種數據持久化的解決方案,下面我們就來看看具體如何解決的吧
    2023-10-10

最新評論

庆城县| 五河县| 贡山| 天等县| 渭源县| 昔阳县| 渭源县| 犍为县| 天等县| 高邑县| 云安县| 黑龙江省| 千阳县| 万荣县| 海门市| 华池县| 塔城市| 克东县| 武夷山市| 日喀则市| 固始县| 疏附县| 绥宁县| 凤庆县| 茌平县| 林西县| 伊吾县| 凤凰县| 沂南县| 高清| 临漳县| 霍城县| 博爱县| 花莲县| 霞浦县| 固原市| 靖西县| 大厂| 舞钢市| 稷山县| 临漳县|