news 2026/7/15 21:12:11

Vue3

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue3

目录

01为什么学vue3

02setup选项

03组合式API:reactive和ref函数

04组合式API:computed

05组合式API:watch

06组合式API - 生命周期函数


01为什么学vue3

vue3的优势:

更易维护:组合式api;更好的ts支持

更快的速度:重写diff算法;模板编译优化;高效的组件初始化

更小的体积:按需引入;良好的TreeSharking

更优的数据响应式:Proxy

Vue2选项式API vs Vue3组合式API


02setup选项

1.setup选项的执行时机?
beforeCreate钩子之前自动执行
2.setup写代码的特点是什么?
定义数据+函数然后以对象方式return
3.<script setup>解决了什么问题?
经过语法糖的封装更简单的使用组合式AP
4.setup中的this还指向组件实例吗?
指向undefined

1.setup选项的执行时机?

<script> export default { setup(){ }, beforeCreate(){ ) </script>

2.setup写代码的特点是什么?

<script> //数据 和 函数,需要在setup 最后return,才能在模板中应用 export default{ setup(){ //数据 const message = 'hello Vue3' //函数 const logMessage = ()=>{ console.log(message); } return { message, logMessage } console.log('setup函数'); }, beforeCreate(){ console.log('beforeCreate函数'); } } </script> <template> <button @click=logMessage class="btn">按钮</button> </template>

3.setup语法糖:语法糖写法如下

<script setup> //数据 const message = '这是语法糖的message' //函数 const logMessage = ()=>{ console.log(message); } </script>

03组合式API:reactive和ref函数

reactive()

作用:接受对象类型数据的参数传入并返回一个响应式的对象

核心步骤:1.从vue包中导入reactive函数

2.在<script setup>中执行reactive函数并传入类型为对象的初始值,并使用变量接收返回值

ref()

作用:接收简单类型或者对象类型的数据传入并返回一个响应式的对象

核心步骤:1.从vue包中导入ref函数

2. 在<script setup>中执行ref 函数并传入初始值,使用变量接收 ref 函数的返回值

本质:是在原有传入数据的基础上,外层包了一层对象,包成了复杂类型

底层:包成复杂类型之后,再借助reactive实现的响应式

注意点:

1.脚本中访问数据,需要通过·value

2.在template中,.value不需要加(帮我们扒了一层)

<!-- reactive --> <script setup> //reactive:接收对象类型数据的参数传入并返回一个响应式的对象 import {reactive} from 'vue' const zero = reactive({ count:200 }) const setData = ()=>{ zero.count++ } </script> <template> <div> {{ zero.count }} </div> <button @click="setData">添加1</button> </template>
<!-- ref() --> <script setup> import { ref } from 'vue' const count = ref(0) const setCount = ()=>{ //count本质是对象,不能直接count++ count.value++ } </script> <template> <div> <div>{{ count }}</div> <button @click="setCount">+1</button> </div> </template>

1.reactive和ref函数的共同作用是什么?

用函数调用的方式生成响应式数据

2. reactive vs ref ?

(1).reactive不能处理简单类型的数据

(2).ref参数类型支持更好但是必须通过.value访问修改

(3).ref函数的内部实现依赖于reactive函数

3.在实际生活中推荐使用哪一个?

推荐使用ref函数,更加灵活统一

04组合式API:computed

计算属性基本思想与Vue2的完全一致,组合式API下的计算属性只是修改了写法

核心步骤:

1.导入computed函数

2.执行函数子啊回调参数中return 基于响应式数据做计算的值,用变量接收

<!-- 计算属性小案例 --> <script setup> //const计算属性 = computed (()=>{ //return 计算返回的值 //}) import { computed,ref } from 'vue' //声明数据 const list = ref([1,2,3,4,5,6,7,8]) //基于list派生一个计算属性,从list中过滤出>2 const computedList = computed(()=>{ //list是对象 list.value才是数组 return list.value.filter(item => item>2) }) //定义一个修改数据的方法 const addFun = ()=>{ list.value.push(666) } </script> <template> <div> <div>原始数据:{{ list }}</div> <div>计算后的数据:{{ computedList }}</div> <button @click="addFun" type="button">修改</button> </div> </template>

05组合式API:watch

侦听一个或者多个数据的变化,数据变化时执行回调函数,

俩个额外参数: immediate控制立刻执行,deep开启深度侦听

1. 侦听单个数据

<script setup> // 1. 导入watch import { ref, watch } from 'vue' const count = ref(0) // 2. 调用watch 侦听变化 watch(count, (newValue, oldValue)=>{ console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`) }) </script>

2. 侦听多个数据:侦听多个数据,第一个参数可以改写成数组的写法

<script setup> // 1. 导入watch import { ref, watch } from 'vue' const count = ref(0) const name = ref('cp') // 2. 调用watch 侦听变化 watch([count, name], ([newCount, newName],[oldCount,oldName])=>{ console.log(`count或者name变化了,[newCount, newName],[oldCount,oldName]) }) </script>

3. immediate:在侦听器创建时立即出发回调,响应式数据变化之后继续执行回调

<script setup> // 1. 导入watch import { ref, watch } from 'vue' const count = ref(0) // 2. 调用watch 侦听变化 watch(count, (newValue, oldValue)=>{ console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`) },{ immediate: true }) </script>

4. deep
通过watch监听的ref对象默认是浅层侦听的,直接修改嵌套的对象属性不会触发回调执行,需要开启deep

<script setup> // 1. 导入watch import { ref, watch } from 'vue' const state = ref({ count: 0 }) // 2. 监听对象state watch(state, ()=>{ console.log('数据变化了') }) const changeStateByCount = ()=>{ // 直接修改不会引发回调执行 state.value.count++ } </script>
<script setup> // 1. 导入watch import { ref, watch } from 'vue' const state = ref({ count: 0 }) // 2. 监听对象state 并开启deep watch(state, ()=>{ console.log('数据变化了') },{deep:true}) const changeStateByCount = ()=>{ // 此时修改可以触发回调 state.value.count++ } </script>

06组合式API - 生命周期函数

1.生命周期函数基本使用
1. 导入生命周期函数
2. 执行生命周期函数,传入回调

<scirpt setup> //beforeCreate和created的相关代码 //一律放在setup中执行 import { onMounted } from 'vue' onMounted(()=>{ // 自定义逻辑 }) </script>

2.执行多次 生命周期函数执行多次的时候,会按照顺序依次执行

<scirpt setup> import { onMounted } from 'vue' onMounted(()=>{ // 自定义逻辑 }) onMounted(()=>{ // 自定义逻辑 }) </script>
<script setup> import { onMounted } from 'vue'; const getList = ()=>{ setTimeout(()=>{ console.log('发送请求,获取数据'); },2000) } //一进入页面的请求 getList() //如果有些代码需要在mounted中执行 onMounted(()=>{ console.log('mounted生命周期函数1'); }) //写成函数的调用方式,可以调用多次 //调用多次并不会冲突,而是按照顺序依次执行 onMounted(()=>{ console.log('mounted生命周期函数2'); }) </script>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 21:11:03

关于微服务基本框架搭建--fegin最小使用demo

1. 整体目录结构 microservice-demo&#xff08;父工程&#xff09; ├── pom.xml&#xff08;父POM&#xff0c;管理版本&#xff09; ├── common&#xff08;公共模块&#xff09; │ ├── pom.xml │ └── src/main/java/com/demo/common/ │ ├── dto…

作者头像 李华
网站建设 2026/7/15 21:10:50

AI 辅助设计规范检查:自动验证间距、字号与颜色的一致性

AI 辅助设计规范检查&#xff1a;自动验证间距、字号与颜色的一致性 一、那个用 13px 字号的表单和用 14px 的侧边栏——没人注意到&#xff0c;直到审计那天 一个后台管理系统的"设计一致性审计"发现了一个让人脸红的数字&#xff1a;全站 270 个页面中&#xff0c;…

作者头像 李华
网站建设 2026/7/15 21:08:20

Mac Mini部署多AI智能体:模型选择与资源分配实战指南

如果你也想过用一台入门级设备跑起多个 AI 智能体&#xff0c;让它们帮你自动处理任务&#xff0c;那 Mac Mini 确实是个不错的选择。它功耗低、体积小&#xff0c;适合 7x24 小时开机&#xff0c;但能不能稳定跑起 4 个 AI 员工&#xff0c;关键不在硬件本身&#xff0c;而在你…

作者头像 李华
网站建设 2026/7/15 21:07:32

现代C++ TOML解析器toml++:从使用到贡献代码的完整指南

1. 项目概述&#xff1a;为什么我们需要一个现代的C TOML解析器&#xff1f;如果你最近在折腾C项目&#xff0c;尤其是那些需要配置文件的项目&#xff0c;大概率已经对INI、JSON、XML这些格式感到厌倦了。INI太简单&#xff0c;缺乏层次和类型&#xff1b;JSON虽然流行&#x…

作者头像 李华
网站建设 2026/7/15 21:04:55

RTX5090 32G 八卡算力集群技术特性与全行业落地应用场景详解

在当前AI大模型与多模态技术高速迭代的背景下&#xff0c;中端旗舰多卡算力集群凭借高性价比、高并行算力、灵活部署的优势&#xff0c;成为科研与企业研发的核心算力选型方案。RTX5090-32G作为新一代消费级旗舰算力卡&#xff0c;单卡超大显存、强劲CUDA算力适配绝大多数中小规…

作者头像 李华
网站建设 2026/7/15 21:03:10

盘锦瑜伽馆报名,先看课程和老师

盘锦瑜伽馆报名前&#xff0c;先看课程和老师&#xff0c;比单纯看价格、装修更重要。因为真正影响你能不能坚持、练得是否舒服、动作是否安全的&#xff0c;不是“课表看起来多”&#xff0c;而是课程强度是否适合你&#xff0c;老师能不能观察动作细节&#xff0c;课堂人数会…

作者头像 李华