Vue3 setup、ref和reactive函數

一、setup函數

? ? ? ? 1.理解:Vue3.0中一個新的配置項,值為一個函數。

? ? ? ? 2.setup是所有Composition API(組合API)的“表演舞臺”。

? ? ? ? 3.組件中用到的:數據、方法等等,均要配置在setup中。

? ? ? ? 4.setup函數的兩種返回值:

? ? ? ? ? ? ? ? (1).若返回一個對象,則對象中的屬性方法,在模板中均可以直接使用。(重點關注!)

? ? ? ? ? ? ? ? (2).若返回一個渲染函數,則可以自定義渲染內容。(了解)

? ? ? ? 5.注意:

? ? ? ? ? ? ? ? (1).盡量不要用Vue2.x配置混用

? ? ? ? ? ? ? ? ? ? ? ? (1.Vue2.x配置(data、methods、computed...)中可以訪問到setup中的屬性和方法。

? ? ? ? ? ? ? ? ? ? ? ? (2.但在setup中不能訪問到Vue2.x配置(data、methods、computed...)。

? ? ? ? ? ? ? ? ? ? ? ? (3.如果有重名,setup優先。

? ? ? ? ? ? ? ? (2)setup不能是一個async函數,因為返回值不再是return的對象,而是promise,模板看不到return對象中的屬性。(后期也可以返回一個promise實例,但需要Suspense和異步組件的配合)。

<template><h1>一個人的信息</h1><h2>姓名:{{ name }}</h2><h2>年齡:{{ age }}</h2><h2>性別:{{ sex }}</h2><button @click="sayHello">vue3函數</button><br><br><button @click="sayWelcome">vue2函數</button><br><br><button @click="towReadThree">Vue2讀取Vue3</button><br><br><button @click="threeReadTow">Vue3讀取Vue2</button>
</template><script>
import {h} from 'vue'
export default {name: 'App',data() {return {sex:'男'}},methods: {sayWelcome(){alert('歡迎學習Vue3!')},towReadThree(){console.log(this.name)console.log(this.age)console.log(this.sayHello)}},setup() {let name='張三'let age=18let sex='女'function sayHello(){alert('你好,Vue3!')}function threeReadTow(){console.log(this.sex)console.log(this.sayWelcome)console.log(this.towReadThree)}return {name,age,sex,sayHello,threeReadTow}//渲染函數// return () => h('h1','你好啊')}
}
</script>

?二、ref函數

? ? ? ? 1.作用:定義一個響應式的數據。

? ? ? ? 2.語法:const xxx = ref(initValue)

? ? ? ? ? ? ? ? (1).創建一個包含響應式數據的引用對象(reference對象,簡稱ref對象)

? ? ? ? ? ? ? ? (2).JS中操作數據:xxx.value

? ? ? ? ? ? ? ? (3).模板中讀取數據:不需要.value,直接<div>{{xxx}}</div>

? ? ? ? 3.備注:

? ? ? ? ? ? ? ? (1).接收的數據可以是:基本類型、也可以是對象類型。

? ? ? ? ? ? ? ? (2).基本類型的數據:響應式依然是靠Object.defineProperty()getset完成的。

? ? ? ? ? ? ? ? (3).對象類型的數據:內部“求助”了Vue3.0中的一個新函數——reactive函數。

<template><h1>一個人的信息</h1><h2>姓名:{{ name }}</h2><h2>年齡:{{ age }}</h2><h2>職業:{{ obj.type }}</h2><h2>工資:{{ obj.salary }}</h2><button @click="sayHello">vue3函數</button><br><br>
</template><script>
import {ref} from 'vue'
export default {name: 'App',setup() {let name=ref('張三')let age=ref(18)let obj=ref({type:'前端工程師',salary:'30k'})function sayHello(){obj.value.type = 'UI設計師',obj.value.salary = '60k' console.log(obj)}return {name,age,obj,sayHello,}}
}
</script>

三、reactive函數

? ? ? ? 1.作用:定義一個對象類型的響應式數據(基本類型不要用它,要用ref函數)。

? ? ? ? 2.語法:const 代理對象= reactive(源對象)接受一個對象(或數組),返回一個代理對象(Proxy的實例對象,簡稱proxy對象)

? ? ? ? 3.reactive定義的響應式數據是“深層次的”。

? ? ? ? 4.內部基于ES6的Proxy實現,通過代理對象操作源對象內部數據進行操作。

<template><h1>一個人的信息</h1><h2>姓名:{{ person.name }}</h2><h2>年齡:{{ person.age }}</h2><h2>職業:{{ person.obj.type }}</h2><h2>工資:{{ person.obj.salary }}</h2><button @click="sayHello">vue3函數</button><br><br>
</template><script>
import {ref,reactive} from 'vue'
export default {name: 'App',setup() {let person =reactive({name:'張三',age:18,obj:{type:'前端工程師',salary:'30k'}})function sayHello(){person.name='李四'person.age = 40person.obj.type = 'UI設計師',person.obj.salary = '60k' }return {person,sayHello,}}
}
</script>

?四、reactive對比ref

? ? ? ? 1.從定義數據角度對比:

? ? ? ? ? ? ? ? (1).ref用來定義:基本數據類型

? ? ? ? ? ? ? ? (2).reactive用來定義:對象(或數組)類型數據

? ? ? ? ? ? ? ? (3).備注:ref也可以用來定義對象(或數組)類型數據,它內部會自動通過reactive轉為代理對象

? ? ? ? 2.從原理角度對比:

? ? ? ? ? ? ? ? (1).ref通過Object.defineProperty()getset來實現響應式(數據劫持)。

? ? ? ? ? ? ? ? (2).reactive通過使用Proxy來實現響應式(數據劫持),并通過Reflect操作源對象內部的數據。

? ? ? ? 3.從使用角度對比:

? ? ? ? ? ? ? ? (1).ref定義的數據:操作數據需要.value,讀取數據時模板中直接讀取不需要.value

? ? ? ? ? ? ? ? (2).reactive定義的數據:操作數據預讀取數據均不需要.value

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917428.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中appium 的NoSuchElementException錯誤 原因以及解決辦法

錯誤收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus從入門到入土(四):持久層接口之BaseMapper和選裝件

大家好&#xff0c;今天繼續更新MybatisPlus從入門到入土系列&#xff0c;上一次的持久層接口還沒講完&#xff0c;只講了IService接口&#xff0c;今天我們繼續來講一下。 BaseMapper BaseMapper中的方法也比較簡單&#xff0c;都是增刪改查的基礎API&#xff0c;不知道大家還…

數組和指針的關系

在 C 語言中&#xff0c;?指針和數組有著非常緊密的聯系&#xff0c;但它們本質上是 ?不同的概念。理解它們的關系是掌握 C 語言內存操作的關鍵。下面我會從多個角度幫你梳理 ?指針和數組的直接聯系&#xff0c;并解釋它們的異同點。1. 數組和指針的本質區別?概念本質存儲方…

AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之github網站在線搜索

系列篇章?? No. 文章 1 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎的構建與初步實踐 2 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之GLM-4大模型技術的實踐探索 3 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之知乎網站數據獲取(初步實踐) 4 AI大模型探索之路…

從0到1學PHP(十二):PHP 框架入門與項目實戰

目錄一、主流 PHP 框架介紹1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的優勢二、框架基本使用&#xff08;以 Laravel 為例&#xff09;2.1 框架的安裝與配置2.2 路由定義、控制器創建、視圖渲染2.3 數據庫操作&#xff08;ORM 的使用&#xff09;三、小型項目實戰3.1 項目需求分…

MPLS LSP

一、概述上一章我們已經介紹過,LSP是MPLS報文在MPLS網絡中轉發時經過的路徑,可以看作是由報文傳輸方向節點為對應FEC分配的MPLS入標簽組成的,因為每臺設備上為每個FEC分配的入標簽是唯一 的&#xff0c;并與由下游節點為本地節點上該FEC分配的出標簽建立映射關系&#xff0c; 所…

圖像、視頻、音頻多模態大模型中長上下文token壓縮方法綜述

多模態大模型MLLMs 能夠處理高分辨率圖像、長視頻序列和冗長音頻輸入等復雜上下文&#xff0c;但自注意力機制的二次復雜度使得大量輸入 token 帶來了巨大的計算和內存需求。 如下圖&#xff0c;上&#xff1a;圖像、視頻和音頻數據類型可以在其表示維度上進行擴展&#xff0c;…

Spring MVC 九大組件源碼深度剖析(一):MultipartResolver - 文件上傳的幕后指揮官

文章目錄一、為什么從 MultipartResolver 開始&#xff1f;二、核心接口&#xff1a;定義文件上傳的契約三、實現解析&#xff1a;兩種策略的源碼較量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首選&#xff09;2. CommonsMultipartResolver&#xff08;兼容…

stm32是如何實現電源控制的?

STM32的電源控制主要通過內置的電源管理模塊&#xff08;PWR&#xff09;實現&#xff0c;涵蓋電壓調節、功耗模式切換和電源監控等功能。以下是其核心機制及實現方式&#xff1a;??1. 電源架構與供電區域??STM32的電源系統分為多個供電區域&#xff0c;各司其職&#xff1…

《R for Data Science (2e)》免費中文翻譯 (第3章) --- Data transformation(1)

寫在前面 本系列推文為《R for Data Science (2)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github&#xff0c;歡迎大家參與貢獻&#xff0c;詳細信息見&#xff1a; Books-zh-cn 項目介紹&#xff1a; Books-zh-cn&#xff1a;開源免費的中文書籍社區 r4ds-zh-cn …

rclone、rsync、scp使用總結

數據同步工具使用總結【rclone、rsync、scp】一、數據處理背景二、數據處理方法對比1、數據關系梳理2、不同工具處理方法3、經驗總結三、工具擴展知識1、rclone工具介紹&#xff08;1&#xff09;、rclone概述&#xff08;2&#xff09;、安裝工具及配置本地文件遷移到云上服務…

用latex+vscode+ctex寫畢業論文

文章目錄前言一、安裝latex二、安裝ctex包三、更新ctex包四、使用ctex文檔類前言 用latexvscodectex寫畢業論文。&#xff08;英文論文不用安裝ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;為中文 LATEX 文檔提供了漢字輸出支持、標點壓縮、字…

深度學習·mmsegmentation基礎教程

mmsegmentation的使用教程 mmsegmentation微調方法總結 自定義自己的數據集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注冊&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定義訓練和測試的pipeline&#xff1a;mmsegme…

InfluxDB 與 Node.js 框架:Express 集成方案(二)

四、優化與注意事項 &#xff08;一&#xff09;性能優化技巧 連接池管理&#xff1a;使用連接池可以有效減少創建和銷毀數據庫連接的開銷。在 Node.js 中&#xff0c;可以借助influx模塊結合第三方連接池庫&#xff0c;如generic-pool來實現連接池的管理 。通過設置連接池的…

單位長度上的RC參數

1inch1000mil25.4mm2.54cm 使用SI9000計算導線上電容電感參數并使用Q2D進行仿真驗證。使用SI9000建立一個阻抗為50歐的微帶線模型&#xff0c;后對該模型進行1GHz頻域計算 通過計算得到結果&#xff0c;可知1GHz頻率下單位傳輸線上的RLGC參數使用SI9000計算好單位長度上的RLGC參…

基于Dockerfile 部署一個 Flask 應用

Docker 與 Python&#xff1a;容器化部署應用&#xff0c;實現快速發布與彈性伸縮 以下是一個簡單的 Flask 應用 # app.py - 一個簡單的Flask應用 from flask import Flask import osapp Flask(__name__)app.route("/") def hello():env os.environ.get(FLASK_ENV,…

DFT設計中的不同階段介紹

在DFT&#xff08;Design for Test&#xff0c;可測試性設計&#xff09;軟件開發中&#xff0c;針對設計檢測的完整流程通常包含Setup&#xff08;設置&#xff09;、Analysis&#xff08;分析&#xff09;、Insertion&#xff08;插入&#xff09;和Verification&#xff08;…

自動化測試準備工作:概念篇

自動化 什么是自動化? 超市的自動閘門&#xff0c;不需要手動的開門關門生活中的自動動化案例有效的減少了人力的消耗&#xff0c;同時也提高了生活的質量。 軟件自動化測試同理&#xff0c;通過編寫自動化測試程序&#xff08;減少人力和時間的消耗&#xff0c;提高軟件的…

每日主題切換網頁:用純前端技術打造隨心情變化的動態界面

&#x1f3a8; 每日主題切換網頁&#xff1a;用純前端技術打造隨心情變化的動態界面 項目地址&#xff1a;https://github.com/hhse/daily-theme-switcher 在線演示&#xff1a;https://hhse.github.io/daily-theme-switcher 這里寫目錄標題&#x1f3a8; 每日主題切換網頁&…

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )簡介與簡單示例

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…