Vue3学习笔记(上)

Vue3学习笔记(上)

Vue3的优势:

  • 更容易维护:
    1. 组合式API
    2. 更好的TypeScript支持
  • 更快的速度:
    1. 重写diff算法
    2. 模板编译优化
    3. 更高效的组件初始化
  • 更小的体积:
    1. 良好的TreeShaking
    2. 按需引入
  • 更优的数据响应式:Proxy

创建vue3项目

create-vue是vue官方新的脚手架工具,底层切换到了vite(下一代构建工具),为开发提供急速响应。

  1. 前提环境条件:

    已安装16.0或更高版本的Node.js

    node -v

  2. 创建一个Vue应用

    npm init vue@latest这一指令将会安装并执行create-vue

项目目录与关键文件

  1. vite.config.js - 项目的配置文件(基于vite的配置)

  2. package.json - 项目包(核心依赖项变成了Vue3)

  3. main.js - 入口文件(createApp函数创建应用实例)

  4. app.vue - 根组件(SFC单文件组件script - template)

    变化一:脚本script和模板template顺序调整

    变化二:模板template不再要求唯一根元素

    变化三:脚本script添加setup标识支持组合式API

  5. index.html - 单页入口(提供id为app的挂载点)

组合式API

setup选项

原始写法:

<script>
import HelloWorld from './components/HelloWorld.vue'
import TheWelcome from './components/TheWelcome.vue'
export default {
  setup () {
	const message = 'hello'
    const logmsg = () => {
        console.log(message)
    }
    return {
        message,
        logmsg
    }
  }
}
</script>

语法糖写法:

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import TheWelcome from './components/TheWelcome.vue'
export default {
	const message = 'hello'
    const logmsg = () => {
        console.log(message)
    }
}
</script>

setup语法糖原理:
在这里插入图片描述

执行时机:比beforeCreate还要早

在这里插入图片描述

注意:

  1. setup函数中,获取不到this(this指向undefined,因为setup函数创建比beforeCreate早,不指向组件实例)
  2. 数据和函数需要在setup最后return,才能在模板中应用
  3. 语法糖写法可以简化代码

reactive函数

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

核心步骤:

<script setup>
// 导入
import { reactive } from 'vue'
    
// 执行函数 传入函数 变量接收
const state = reactive(对象类型数据)
</script>
  1. 从vue包中导入reactive函数
  2. <script setup>中执行reactive函数并传入类型为对象的初始值,并使用变量接收返回值

ref函数

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

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

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

注意点:

  1. 脚本中访问数据,需要通过 .value
  2. 在template中,不需要加 .value

核心步骤:

<script setup>
// 导入
import { ref } from 'vue'
    
// 执行函数 传入函数 变量接收
const count = ref(简单类型或复杂类型数据)
</script>
  1. 从vue包中导入ref函数
  2. <script setup>中执行ref函数并传入初始值,使用变量接收ref函数的返回值

computed

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

<script setup>
// 导入
import { computed } from 'vue'
    
// 执行函数 传入函数 变量接收
const computeddState = computed(() => {
    return 基于响应式数据做计算之后的值
})
</script>

核心步骤:

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

注意:

  1. 计算属性中不应该有”副作用”,比如异步请求、修改dom
  2. 避免直接修改计算属性的值,计算属性应该是只读的,特殊情况可以配置 get set

watch

作用:侦听一个或多个数据的变化,数据变化是执行回调函数。

  1. 导入watch函数
  2. 执行watch函数传入要侦听的响应式数据(ref对象)和回调函数

侦听单个数据:

<script setup>
// 导入
import { watch, ref } from 'vue'
const count = ref(0)
    
// 调用watch 侦听变化
watch(count, (newValue, oldValue) => {
    console.log(newValue, oldValue)
})
</script>

侦听多个数据:

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

说明:在侦听器创建时立即触发回调,响应式数据变化之后继续执行回调。

<script setup>
// 导入
import { watch, ref } from 'vue'
const count = ref(0)
    
// 调用watch 侦听变化
watch(count, (newValue, oldValue) => {
    console.log(newValue, oldValue)
}, {
    immediate: true
})
</script>
deep

watch默认进行的是浅层监视,开启deep: true才能监视到复杂数据类型内部数据的变化。

<script setup>
// 导入
import { watch, ref } from 'vue'
const userinfo = ref({
    name: 'zs',
    age: 18
})
    
// 调用watch 侦听变化
watch(userinfo, (newValue, oldValue) => {
    console.log(newValue, oldValue)
}, {
    deep: true
})
</script>
精确侦听到对象内的某个属性
<script setup>
// 导入
import { watch, ref } from 'vue'
const userinfo = ref({
    name: 'zs',
    age: 18
})
    
// 调用watch 侦听变化
watch(() => userinfo.value.age, (newValue, oldValue) => {
    console.log(newValue, oldValue)
})
</script>

Vue3的声明周期

选项式API组合式API
beforeCreate/createdsetup
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeUnmountonBeforeUnmount
unmountedonUnmounted

组合式API的生命周期函数写成函数的调用方式,可以调用多次,并不会冲突,而是按照顺序依次调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913233.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记

这是一篇港科大学生在google research 实习期间发在ECCV2024的语义引导生成式修复的文章&#xff0c;港科大陈启峰也挂了名字。从首页图看效果确实很惊艳&#xff0c;尤其是第三行能用文本调控修复结果牌上的字。不过看起来更倾向于生成&#xff0c;对原图内容并不是很复原&…

Knowledge Graph-Enhanced Large Language Models via Path Selection

研究背景 研究问题&#xff1a;这篇文章要解决的问题是大型语言模型&#xff08;LLMs&#xff09;在生成输出时存在的事实不准确性&#xff0c;即所谓的幻觉问题。尽管LLMs在各种实际应用中表现出色&#xff0c;但当遇到超出训练语料库范围的新知识时&#xff0c;它们通常会生…

常见计算机网络知识整理(未完,整理中。。。)

TCP和UDP区别 TCP是面向连接的协议&#xff0c;发送数据前要先建立连接&#xff1b;UDP是无连接的协议&#xff0c;发送数据前不需要建立连接&#xff0c;是没有可靠性&#xff1b; TCP只支持点对点通信&#xff0c;UDP支持一对一、一对多、多对一、多对多&#xff1b; TCP是…

HashMap(深入源码追踪)

一篇让你搞懂HashMap的几个最重要的知识点,往源码跟踪可以让我们很轻松应对所谓的一些八股面试题. 一. 属性解释 先来解释HashMap中重要的常量属性值 DEFAULT_INITIAL_CAPACITY : 默认初始化容量,也就是如果不指定初始化的Map存储容量大小,默认生成一个存储16个空间的Map集合…

MySQL中的事务与锁

目录 事务 InnoDB 和 ACID 模型 原⼦性的实现 持久性的实现 ​隔离性的实现 锁 隔离级别 ​多版本控制(MVCC) 事务 1.什么是事务? 事务是把⼀组SQL语句打包成为⼀个整体&#xff0c;在这组SQL的执⾏过程中&#xff0c;要么全部成功&#xff0c;要么全部失败&#…

C#开发基础:WPF和WinForms关于句柄使用的区别

1、前言 在 Windows 应用程序开发中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;和 WinForms&#xff08;Windows Forms&#xff09;是两种常见的用户界面&#xff08;UI&#xff09;框架。它们各自有不同的架构和处理方式&#xff0c;其中一个显…

基于.NET开源、功能强大且灵活的工作流引擎框架

前言 工作流引擎框架在需要自动化处理复杂业务流程、提高工作效率和确保流程顺畅执行的场景中得到了广泛应用。今天大姚给大家推荐一款基于.NET开源、功能强大且灵活的工作流引擎框架&#xff1a;elsa-core。 框架介绍 elsa-core是一个.NET开源、免费&#xff08;MIT License…

.NET6中WPF项目添加System.Windows.Forms引用

.NET6中WPF项目添加System.Windows.Forms引用 .NET6的WPF自定义控件默认是不支持System.Windows.Forms引用的&#xff0c;需要添加这个引用方法如下&#xff1a; 1. 在项目浏览器中找到项目右击&#xff0c;选择编辑项目文件&#xff08;Edit Project File&#xff09;。 …

16.UE5拉怪机制,怪物攻击玩家,伤害源,修复原视频中的BUG

2-18 拉怪机制&#xff0c;怪物攻击玩家、伤害源、黑板_哔哩哔哩_bilibili 目录 1.实行行为树实现拉怪机制 1.1行为树黑板 1.2获取施加伤害对象&#xff08;伤害源&#xff09; 2.修复原视频中&#xff0c;第二次攻击怪物后&#xff0c;怪物卡在原地不动的BUG 3.怪物攻击玩…

<项目代码>YOLOv8 草莓成熟识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

Vue全栈开发旅游网项目(9)-用户登录/注册及主页页面开发

1.用户登录页面开发 1.查询vant组件 2.实现组件模板部分 3.模型层准备 4.数据上传 1.1 创建版权声明组件Copyright 新建文件&#xff1a;src\components\common\Copyright.vue <template><!-- 版权声明 --><div class"copyright">copyright xx…

后台管理系统窗体程序:文章管理 > 文章列表

目录 文章列表的的功能介绍&#xff1a; 1、进入页面 2、页面内的各种功能设计 &#xff08;1&#xff09;文章表格 &#xff08;2&#xff09;删除按钮 &#xff08;3&#xff09;编辑按钮 &#xff08;4&#xff09;发表文章按钮 &#xff08;5&#xff09;所有分类下拉框 &a…

【万字详解】如何在微信小程序的 Taro 框架中设置静态图片 assets/image 的 Base64 转换上限值

设置方法 mini 中提供了 imageUrlLoaderOption 和 postcss.url 。 其中&#xff1a; config.limit 和 imageUrlLoaderOption.limit 服务于 Taro 的 MiniWebpackModule.js &#xff0c; 值的写法要 &#xff08;&#xff09;KB * 1024。 config.maxSize 服务于 postcss-url 的…

基于STM32通过TM1637驱动4位数码管详细解析(可直接移植使用)

目录 1. 单位数码管概述 2. 对应编码 2.1 共阳数码管 2.2 共阴数码管 3. TM1637驱动数码管 3.1 工作原理 3.1.1 读键扫数据 3.1.2 显示器寄存器地址和显示模式 3.2 时序 3.2.1 指令数据传输过程&#xff08;读案件数据时序&#xff09; 3.2.2 写SRAM数据…

数字信号处理Python示例(11)生成非平稳正弦信号

文章目录 前言一、生成非平稳正弦信号的实验设计二、生成非平稳正弦信号的Python代码三、仿真结果及分析写在后面的话 前言 本文继续给出非平稳信号的Python示例&#xff0c;所给出的示例是非平稳正弦信号&#xff0c;在介绍了实验设计之后给出Python代码&#xff0c;最后给出…

Linux 系统结构

Linux系统一般有4个主要部分&#xff1a;内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构&#xff0c;它们使得用户可以运行程序、管理文件并使用系统。 1. linux内核 内核是操作系统的核心&#xff0c;具有很多最基本功能&#xff0c;它…

网络安全之SQL初步注入

一.字符型 平台使用pikachu $name$_GET[name]; ​ $query"select id,email from member where username$name"; 用户输入的数据会被替换到SQL语句中的$name位置 查询1的时候&#xff0c;会展示username1的用户数据&#xff0c;可以测试是否有注入点&#xff08;闭…

【IEEE/EI会议】第八届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2025)

会议通知 会议时间&#xff1a;2025年4月25-27日 会议地点&#xff1a;中国南京 会议官网&#xff1a;www.aemcse.org 会议简介 第八届先进电子材料、计算机与软件工程国际学术会议&#xff08;AEMCSE 2025&#xff09;由南京信息工程大学主办&#xff0c;将于2025年4月25日…

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目分享——共九套&#xff08;每套四十题&#xff09; 岗位——芯片与器件设计工程师 岗位意向——模拟芯片 真题题目分享&#xff0c;完整题目&#xff0c;无答案&#xff08;共8套&#xff09; 实习岗位…

Python——数列1/2,2/3,3/4,···,n/(n+1)···的一般项为Xn=n/(n+1),当n—>∞时,判断数列{Xn}是否收敛

没注释的源代码 from sympy import * n symbols(n) s n/(n1) print(数列的极限为&#xff1a;,limit(s,n,oo))