初学vue3时应该注意的几个问题
初学vue3时应该注意的几个问题
声明响应式
响应式数据的声明在vue2的时候很简单,在data中声明就行了。但现在可以使用多个方式。
reactive用于声明Object, Array, Map, Set;
ref用于声明String, Number, Boolean
使用reactive来声明基础数据类型(String, Number, Boolean)将导致警告,并且该值不会变为响应式。
<script setup>
import { reactive } from "vue";const count = reactive(0);
</script>

但是反过来,使用ref来声明复杂数据类型(Object, Array, Map, Set等)是生效的,因为ref内部对于复杂数据类型会调用reactive来声明。
解构reactive值
假设我们有一个带有计数器和增加计数器的按钮的响应式对象。
<template>Counter: {{ state.count }}<button @click="add">Increase</button>
</template><script>
import { reactive } from "vue";
export default {setup() {const state = reactive({ count: 0 });function add() {state.count++;}return {state,add,};},
};
</script>
当使用es6进行解构时就会出问题。
<template><div>Counter: {{ count }}</div><button @click="add">Increase</button>
</template><script>
import { reactive } from "vue";
export default {setup() {const state = reactive({ count: 0 });function add() {state.count++;}return {...state,add,};},
};
</script>

代码看起来是一样的,根据我们之前的经验,应该是没问题的,但事实上,Vue 的反应性跟踪是通过属性访问来工作的。这意味着我们无法分配或解构响应式对象,因为与第一个引用的反应性连接丢失了。这是使用响应式的限制之一。
.value
ref接受一个值并返回一个响应式对象。可以通过.value来访问对象。
const count = ref(0)console.log(count) // { value: 0 }
console.log(count.value) // 0count.value++
console.log(count.value) // 1
refs 在模板中使用时会被解开,不需要写.value.
<script setup>
import { ref } from 'vue'const count = ref(0)function increment() {count.value++
}
</script><template><button @click="increment">{{ count }}<!--不需要.value --></button>
</template>
不过要小心!只有顶级属性才能通过.访问。下面的代码片段将产生[object Object]
<script setup>
import { ref } from 'vue'const object = { foo: ref(1) }</script><template>{{ object.foo + 1 }} // [object Object]
</template>
emit事件
在vue中,子组件可以通过$emit来与父组件进行通信,只需要添加一个自定义侦听器来侦听事件。
父组件:
<my-component @my-event="doSomething" />
子组件
this.$emit('my-event')
现在emit事件需要使用defineEmits来声明。
<script setup>
const emit = defineEmits(['my-event'])
emit('my-event')
</script>
另一件要记住的事情是,defineEmits或者(defineProps用于声明 props)在script setup.都不需要导入。使用时它们会自动可用。
<script setup>
const props = defineProps({foo: String
})const emit = defineEmits(['change', 'delete'])
// setup code
</script>
.native修饰符已被移除
声明附加选项
选项式 API 方法中的一些属性在script setup并不被支持:
- name
- inheritAttrs
- 插件或库所需的自定义选项
解决方案是在script setup RFC中定义的同一组件中使用 2 个不同的script标签。
<script>export default {name: 'CustomName',inheritAttrs: false,customOptions: {}}
</script><script setup>// script setup logic
</script>
定义异步组件
异步组件以前是通过将它们包含在函数中来声明的
const asyncModal = () => import('./Modal.vue')
从 Vue 3 开始,异步组件需要使用defineAsyncComponent方法显式定义。
import { defineAsyncComponent } from 'vue'const asyncModal = defineAsyncComponent(() => import('./Modal.vue'))
在模板中使用不必要的包装元素
Vue 2 中需要组件模板的单个根元素,这有时会引入不必要的包装元素。
<template><div><header>...</header><main>...</main><footer>...</footer></div>
</template>
而vue3支持多个根元素
<template><header>...</header><main v-bind="$attrs">...</main><footer>...</footer>
</template>
使用错误的生命周期事件
所有组件生命周期事件都通过添加on前缀或完全更改名称来重命名。

相关文章:
初学vue3时应该注意的几个问题
初学vue3时应该注意的几个问题 声明响应式 响应式数据的声明在vue2的时候很简单,在data中声明就行了。但现在可以使用多个方式。 reactive用于声明Object, Array, Map, Set; ref用于声明String, Number, Boolean 使用reactive来声明基础数据类型(Str…...
基于Selenium技术方案的爬虫入门实践
通过爬虫技术抓取网页,动态加载的数据或包含 JavaScript 的页面,需要使用一些特殊的技术和工具。以下是一些常用的技术方法: 使用浏览器模拟器:使用像 Selenium、PhantomJS 或其他类似工具可以模拟一个完整的浏览器环境࿰…...
【C++入门到精通】C++入门 —— vector (STL)
阅读导航 前言一、vector简介1. 概念2. 特点 二、vector的使用1.vector 构造函数2. vector 空间增长问题⭕resize 和 reserve 函数 3. vector 增删查改⭕operator[] 函数 三、迭代器失效温馨提示 前言 前面我们讲了C语言的基础知识,也了解了一些数据结构࿰…...
git简单使用
1.在 远端仓库创建好仓库 2.在本地中创建仓库 mkdir 仓库名 cd 仓库名 3.初始化(可以省略) git init 4.添加远端仓库 git remote add origin https://gitee.com/zengtian_7/pet_home.git 5.初始化代码库:当你创建一个全新的代码库时,…...
CSS—选择器
目录 一、CSS简介 二、HTML页面中常用的元素 三、CSS语法规则 四、常用的选择器 五、CSS的三种使用方法 六、选择器参考 一、CSS简介 CSS (Cascading Style Sheets,层叠样式表),是一种用来为结构化文档(如 HTML 文档或 XML 应…...
【Unity实战系列】Unity的下载安装以及汉化教程
君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,怎么说呢,其实这才是我以后真正想写想做的东西,虽然才刚开始,但好歹,我总算是启程了。今天要分享…...
电脑IP地址错误无法上网怎么办?
电脑出现IP地址错误后就将无法连接网络,从而无法正常访问互联网。那么当电脑出现IP地址错误时该怎么办呢? 确认是否禁用本地连接 你需要先确定是否禁用了本地网络连接,如果发现禁用,则将其启用即可。 启用方法:点击桌…...
机器视觉项目流程和学习方法
机器视觉项目流程: 00001. 需求分析和方案建立 00002. 算法流程规划和业务逻辑设计 00003. 模块化编程和集成化实现 00004. 调试和优化,交付客户及文档 学习机器视觉的方法: 00001. 实战学习,结合项目经验教训 00002. 学习…...
LNMP环境搭建wordpress以及跳转后台报404解决
基于上文配置好的LNMP环境继续搭建wordpress 目录 一.到官网下载tar.gz包,并上传到Linux上,也可以通过复制链接地址进行下载 二. 将wordpress中的所有文件移动到你nginx.conf中指定目录中 三.为wordpress配置数据库 四.到浏览器进行注册 1.刚开始…...
Nginx+Tomcat的动静分离
首先准备好5台机子:2台装有tomcat,3台装有nginx 1.关闭5台机子的防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 Nginx1 vim /usr/local/nginx/conf/nginx.conf#在--#pid-- 下做四层代理 stream {upstream test {server …...
Tomcat部署与优化
目录 一、Tomcat介绍 二、Tomcat核心组件 1、web容器:完成web服务器的功能,web应用 2、servlet容器:名字:catalina,处理servlet代码 servlet的功能 3、jsp:jsp动态页面翻译成servlet代码,用…...
jmeter工具使用
jmeter工具使用 官方下载 安装好jdk后,下载之后直接运行即可 基本流程 1、首先添加线程组 线程组:JMeter是由Java实现的,并且使用一个Java线程来模拟一个用户,因此线程组(Thread Group)就是指一组用户的…...
【uniapp】封装一个全局自定义的模态框
【需求描述】 在接口401处,需要实现全局提示并弹出自定义模态框的功能。考虑到uni-app内置的模态框和app原生提示框的自定义能力有限,我决定自行封装全局自定义的模态框,以此为应用程序提供更加统一且个性化的界面。 【效果图】 【封装】 主…...
UNIX 入门
与 UNIX 建立连接启动会话登录命令提示符修改口令退出系统 简单的 UNIX 命令命令格式ls 命令who 命令虚拟终端 tty伪终端 ptywho am i 命令 cal 命令help 命令man 命令 shell 概述shell 命令更换 shell临时更改 shell永久更改 shell 登录过程 与 UNIX 建立连接 启动会话 要启…...
Golang通过alibabaCanal订阅MySQLbinlog
最近在做redis和MySQL的缓存一致性,一个方式是订阅MySQL的BinLog文件,我们使用阿里巴巴的Canal的中间件来做。 Canal是服务端和客户端两部分构成,我们需要先启动Canal的服务端,然后在Go程序里面连接Canal服务端,即可监…...
Python flask-restful 框架讲解
1、简介 Django 和 Flask 一直都是 Python 开发 Web 的首选,而 Flask 的微内核更适用于现在的云原生微服务框架。但是 Flask 只是一个微型的 Web 引擎,所以我们需要扩展 Flask 使其发挥出更强悍的功能。 python flask框架详解:https://blog.…...
MySQL_约束、多表关系
约束 概念:就是用来作用表中字段的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确性,有效性和完整性。 约束演示 #定义一个学生表,表中要求如下: #sn 表示学生学号,要求使用 …...
在Qt中使用LoadLibrary无法加载DLL
Qt系列文章目录 文章目录 Qt系列文章目录前言一、问题分析 前言 最近因项目需要使用qt做开发,之前使用LoadLibrary加载dll成功,很庆幸,当一切都那么顺风顺水的时候,测试同事却发现,在windows平台上个别电脑上加载dll会…...
如何将区块链新闻稿发布到海外媒体?
随着区块链技术的不断发展,越来越多的区块链项目涌现出来,各大媒体也开始关注和报道区块链新闻。然而,如何将区块链新闻稿发布到海外媒体成为了许多区块链项目所面临的难题。本文将介绍一些有效的方法,帮助区块链项目将新闻稿发布…...
基于 CentOS 7 构建 LVS-DR 群集。
1.准备实验环境 本次实验我准备了4台虚拟机 DS:DIP--192.168.163.138 VIP--192.168.163.200 RIP1(web1)--192.168.163.140 RIP2(web2)--192.168.163.141 Client:user--192.168.163.142 2.配置服务器环境 1)搭建简易的web服务 RIP1 [rootlocalhost ~]# yum …...
多摩川编码器通信避坑指南:STM32 RS485接线、供电不稳、通信失败的排查与修复
多摩川编码器与STM32的RS485通信实战:从硬件设计到故障排查的完整指南 当你在深夜的实验室里盯着示波器上杂乱的波形,反复检查代码却依然无法与多摩川编码器建立通信时,那种挫败感每个嵌入式工程师都深有体会。RS485通信看似简单,…...
Java静态编译内存崩溃全解(GraalVM 22.3+适配版):ClassLoader隔离失效、Metaspace伪泄露、Native Image Heap碎片化三重围剿
第一章:Java静态编译内存崩溃全解(GraalVM 22.3适配版):ClassLoader隔离失效、Metaspace伪泄露、Native Image Heap碎片化三重围剿GraalVM 22.3 引入的 Substrate VM 增强了静态编译能力,但同时也放大了三类隐蔽内存问…...
终极实战指南:深度解析Cursor-Free-VIP突破AI编程助手限制的技术架构与实现
终极实战指南:深度解析Cursor-Free-VIP突破AI编程助手限制的技术架构与实现 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Yo…...
如何让水平滚动条始终固定在页面底部可见
本文介绍通过css实现全局固定水平滚动条的正确方案,解决因overflow-x设置不当导致滚动条不可见的问题,并提供兼容性好、无需javascript的纯css解决方案。 本文介绍通过css实现全局固定水平滚动条的正确方案,解决因overflow-x设置不当导致滚动…...
免费开源的WPS AI插件 察元AI助手:脱密加密模块:Web Crypto 与口令校验
摘要documentDeclassifyCrypto 在缺少 subtle 时直接抛错。默认 PBKDF2 迭代次数与口令复杂度正则在同一文件,修改迭代次数需评估旧数据兼容与性能。关键词PBKDF2;Web Crypto;AES扩展阅读与维护提示本篇围绕「脱密加密模块:Web Crypto 与口令校验」组织材…...
实战指南:三分钟让Mem Reduct内存清理工具显示中文界面
实战指南:三分钟让Mem Reduct内存清理工具显示中文界面 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 你…...
从Xshell转发到VNC共享:一个X11图形隧道的两种打通姿势(含端口避坑指南)
远程图形显示的两种高效实现方案:X11转发与SSH隧道技术解析 在分布式工作环境中,工程师经常面临一个经典场景:如何在本地计算机上显示远程服务器运行的图形界面程序?这种需求在机器学习模型可视化、工业设计软件远程调用或跨平台…...
三步掌握BilibiliDown:从零开始的B站视频高效下载指南
三步掌握BilibiliDown:从零开始的B站视频高效下载指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/b…...
别再死记硬背了!用这5个真实UI案例,彻底搞懂HarmonyOS Flex布局的alignItems
别再死记硬背了!用这5个真实UI案例,彻底搞懂HarmonyOS Flex布局的alignItems 每次看到Flex布局的alignItems属性,你是不是也和我一样,对着文档里的Start、Center、End、Stretch、Baseline这几个选项发愁?明明每个单词都…...
终极指南:ExplorerPatcher一键解决Windows 10开始菜单关闭延迟问题
终极指南:ExplorerPatcher一键解决Windows 10开始菜单关闭延迟问题 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否曾经遇到…...
