一文聊聊vue3中的ref、toRef、toRefs
這篇文章帶大家深入聊聊vue3專案中關於ref、toRef、toRefs的使用方法,希望對大家有幫助!
一、ref
#ref 函數,可以把簡單資料型別包裹成響應式資料(複雜型別也可以),注意JS 中操作值的時候,需要加.value 屬性,模板中正常使用即可。
舉個例子:
- ref包裝基本型別資料
App.vue
<template> <div> <div>{{ name }}</div> <button>修改数据</button> </div></template><script> import { ref } from 'vue' export default { name: 'App', setup() { const name = ref('初映') const updateName = () => { name.value = '初映CY的前说' } return { name, updateName } }, }</script>
可看見寫法與reactive()一樣,不過是在js中書寫的時候需要額外加一個.value即可。 【相關推薦:vuejs影片教學、web前端開發】
- #ref包裝複雜類別類型資料
注意:ref 其實也可以包裹複雜數據類型為響應式數據,一般對於數據類型未確定的情況下建議使用ref,例如後端回傳的數據。
<template> <div> <div>{{ data?.name }}</div> <button>修改数据</button> </div></template><script> import { ref } from 'vue' export default { name: 'App', setup() { // 初始值是 null const data = ref(null) setTimeout(() => { // 右边的对象可能是后端返回的 data.value = { name: '初映', } }, 1000) const updateName = () => { data.value.name = 'CY' } return { data, updateName } }, }</script>
- #如何選擇?
ref()和reactive()都是Vue.js3.0提供的兩個響應式API。
ref()主要用於創建一個響應式數據,它會將一個普通的JavaScript對象轉換為一個響應式的對象,從而使數據的變化可以被Vue實例所追踪,當數據發生變化時,Vue會自動更新相關視圖。 ref()所建立的響應式資料可以透過.value屬性來存取和修改。
reactive()則主要用於建立一個響應式對象,可以用作包含多個值的狀態對象,通常用於管理複雜的狀態。它可以將一個普通的JavaScript物件轉換為一個響應式對象,並且支援嵌套屬性,即使嵌套屬性發生變化也會被Vue實例所追蹤。當響應式物件中有任何一個屬性變更時,Vue也會自動更新相關的視圖。
當你明確知道需要包裹的是一個對象,那麼建議使用 reactive,其他情況使用 ref 即可。
Vue3.2 之後,更建議使用 ref,效能得到了很大的提升。
二、toRef
toRef 函數的作用:轉換響應式物件中某個屬性為單獨響應式數據,並且轉換後的值和之前是關聯的(ref 函數也可以轉換,但值非關聯)。
先看下面這個範例:
<template> <div> <h2 id="name-obj-name-age-obj-age">name: {{ obj.name }} age: {{obj.age}}</h2> <button>修改数据</button> </div></template><script> import { reactive } from 'vue' export default { name: 'App', setup() { const obj = reactive({ name: '初映', age: 18, address: '江西', sex: '男', }) const updateName = () => { obj.name = '初映CY的前说' } return { obj, updateName } }, }</script>
這樣寫也可以將資料進行更改成為響應式的數據,但是帶來了兩個問題:
#問題1:模板中都要使用obj. 進行取得數據,很麻煩。
問題 2:明明模板中只用到了 name 和 age,卻把整個 obj 進行了導出,沒必要,效能浪費。
<template> <div> <h2 id="name-name">name: {{ name }} </h2> <button>修改数据</button> </div></template><script> import { reactive,toRef } from 'vue' export default { name: 'App', setup() { const obj = reactive({ name: '初映', age: 18, address: '江西', sex: '男', }) const name = toRef(obj, 'name') const updateName = () => { obj.name = '初映CY的前说' } return { name, updateName } }, }</script>
這樣把我們需要的資料放進return即可,節約了性能與在模板中的寫法,有點點了'按需導入'的意思
三、torefs
toRefs 函數的作用:轉換響應式物件中所有屬性為單獨響應式數據,並且轉換後的值和之前是關聯的。
<template> <div> <h2 id="name-age">{{ name }} {{ age }}</h2> <button>修改数据</button> </div></template><script> import { reactive, toRefs } from 'vue' export default { name: 'App', setup() { const obj = reactive({ name: '初映', age: 10, }) const updateName = () => { obj.name = '初映CY的前说' obj.age = 18 } return { ...toRefs(obj), updateName } }, }</script>
toRefs將我們所有的響應式資料都進行return出去了,屆時直接用上資料名稱即可,記得加上…喔
據。話不多說,讓我們來學習下這三個方法怎麼用,以及與reactive的差別。
以上是一文聊聊vue3中的ref、toRef、toRefs的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 <script> 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 <router-link to="/"> 組件window.history.back(),方法選擇取決於場景。

可以通過以下方法查詢 Vue 版本:使用 Vue Devtools 在瀏覽器的控制台中查看“Vue”選項卡。使用 npm 運行“npm list -g vue”命令。在 package.json 文件的“dependencies”對像中查找 Vue 項。對於 Vue CLI 項目,運行“vue --version”命令。檢查 HTML 文件中引用 Vue 文件的 <script> 標籤中的版本信息。

向 Vue.js 函數傳遞參數有兩種主要方法:使用插槽傳遞數據或使用 bind 綁定函數,並提供參數:使用插槽傳遞參數:在組件模板中傳遞數據,在組件內訪問並用作函數的參數。使用 bind 綁定傳遞參數:在 Vue.js 實例中綁定函數,並提供函數參數。
