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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;如有问题或其他拓展…