vue3的基本使用(1)

Vue3的基本使用(1)

  • 初识vue3
    • 1. vue3简介
    • 2. 性能提升
    • 3. 源码升级
  • Vue3的创建
    • 1. vue-cli创建
    • 2. vite创建
  • Composition API的区别(组合式)
  • setup函数
  • 响应式数据
    • 1. ref响应式
    • 2. reactive响应式
  • toRefs与toRef简单介绍

初识vue3

1. vue3简介

  • vue是一款用于构建用户界面的 JavaScript框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。
  • 早在2020年9月18日,vue3发布3.0版本。代号one Piece。官方发布地址,vue2在2023年年底已经停止维护~
  • 无需构建步骤,渐进式增强静态的 HTML
    在任何页面中作为 Web Components 嵌入
    单页应用 (SPA)
    全栈 / 服务端渲染 (SSR)
    Jamstack / 静态站点生成 (SSG)
    开发桌面端、移动端、WebGL,甚至是命令行终端中的界面

2. 性能提升

  • 打包体积减少41%
  • 初次渲染快55%,更新渲染快133%
  • 内存减少54%

3. 源码升级

  • 使用Proxy代替defineProperty来实现响应式
  • 重写虚拟DOM以及Tree-Shaking
  • 最开心的是再也不用使用根标签了
  • 可以更好支持TypeScript

Vue3的创建


项目工程可以分两种方式进行创建,一种是原始的使用vue-cli开发,另一种是官方推荐的基于vite创建项目。

1. vue-cli创建

首先先检查自己@vue/cli的版本,确保在4.5.0以上。没有的话请进行安装或升级~

vue --version # 版本检查

npm i -g @vue/cli # 安装升级

vue create [Your Project Name] # 创建项目

创建时需要选择vue版本,随后cd到相关目录下,执行npm run dev即可运行。

在这里插入图片描述

2. vite创建

相关介绍和创建请移步 👉 另一篇博客

Composition API的区别(组合式)

  • vue2API设计是Options风格配置的;
  • vue3API设计是Composition风格配置的;

Options API的弊端

它的属性、方法、数据是分散在data methods computed中的,若想要增加或者修改一个新功能,需要分别修改这些,维护和复用非常的麻烦。

setup函数

setup函数vue3的一个新配置项,值为一个函数,组件中的所有配置都在这个函数里边。

特点:

  • 函数返回的对象中的内容可以直接在模板中使用。
  • 在函数里边访问thisundefined
  • 会在创造之前调用,领先所有钩子函数。
<template>
    <div class="person">
        <h2>姓名: {{ name }}</h2>
        <h2>年龄: {{ age }}</h2>
        <button @click="changeName">修改名字</button>
        <button @click="changeAge">修改年龄</button>
        <button @click="showTel">查看联系方式</button>    
    </div>
</template>

<script lang="ts">
export default {
    setup() {
        let name = 'Samabc'
        let age = 19
        let tel = '18888885466'
        function changeName() {name = 'Samlyx'}
        function changeAge() {age = 20}
        function showTel() {alert(tel)}
        return { name, age, changeAge, changeName, showTel}
    }
}
</script>

此时的变量还不是响应式处理,点击按钮,页面并没有被响应式修改~

语法糖

  • 每个 *.vue 文件最多可以包含一个 <script setup>
<script lang='ts'>
export default{name='person123'}
</script>
<script lang="ts" setup>
let name = 'Samabc'
let age = 19
let tel = '156168878676'
function changeName() {name = 'Samlyx'}
function changeAge() {age = 20}
function showTel() {alert(tel)}
</script>

你会发现为什么会有两个script标签,显得很繁琐,那么有没有解决办法呢?

当然!可以借助一个插件简化该操作。首先执行下面操作进行插件安装~

npm i vite-plugin-vue-setup-extend -D

其次在vite.config.ts文件里进行引入

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueSetup from 'vite-plugin-vue-setup-extend'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),vueSetup()],
})

随后我们就可以将script标签修改简化啦~

<script lang="ts" setup name="person123">
let name = 'Samabc'
let age = 19
let tel = '18888844561'
function changeName() {name = 'Samlyx'}
function changeAge() {age = 20}
function showTel() {alert(tel)}
</script>

这样就将两个script整合到一起了~

响应式数据

有两种方式可以定义响应式

  1. ref响应
  2. reactive响应

1. ref响应式

主要涉及的是基本数据类型,同时也可以定义对象型数据。

使用时需要先引入ref组件,随后将需要响应式处理的数据用ref包裹。

<script lang="ts" setup name="person">
import { ref } from 'vue';

let name = ref('Samabc')
let age = ref(19)
console.log(name)
console.log(age)

function changeName() {
    name.value = 'Samlyx'
}
function changeAge() {
    age.value = 20
}
</script>

控制台打印结果如下,这时候我们打印我们的数据,会发现被ref包裹的数据将会变成一个RefImpl对象。而里边的value就是我们所展示的数据,所有我们如果需要修改这个数据,则需要通过调用变量的value属性进行修改才可以。

在这里插入图片描述

2. reactive响应式

ref类似,只不过它只能针对对象类型。如果你需要重新分配一个对象,则会失去响应式,可以使用object.assign进行整体替换。

<script lang="ts" setup name="car">
import {reactive} from 'vue'

let car = reactive({brand:'奔驰',price:100})

function changePrice() {
    car.price += 10
}
</script>

控制台打印如下:会发现被包裹的对象是一个proxy代理。

在这里插入图片描述

toRefs与toRef简单介绍

  • 作用: 创建一个ref对象,其value值指向另一个对象中的某个属性值
  • 语法: const name = toRef(person, ‘name’)
  • 应用:要将响应式对象中的某个属性单独提供给外部使用
  • 其他: toRefs与toRef功能一致,但是可以批量创建多个ref对象,语法: toRefs(person)

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

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

相关文章

零售EDI:劳氏 Lowe‘s EDI项目案例

通过 EDI&#xff0c;企业与Lowes之间可以直接交换各种商业文档&#xff0c;如订单、发票、收据等&#xff0c;从而实现信息的实时交换&#xff0c;提高了供应链的效率和准确性。在现代供应链管理中&#xff0c;EDI 已经成为了不可或缺的重要工具。 作为一家拥有多条业务线的企…

笔记76:32位/64位操作系统的区别

64位系统和32位系统的区别: 操作系统只是硬件和应用软件中间的一个平台32位操作系统针对的32位的CPU设计64位操作系统针对的64位的CPU设计我们的CPU从原来的8位&#xff0c;16位&#xff0c;到现在的32位和64位&#xff1b;CPU处理计算的时候“数据”和“指令”是不同对待的 &…

HQYJ 3-7 作业

用两个信号量实现线程同步 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semap…

Spring Boot异常处理和单元测试

1.SpringBoot异常处理 1.1.自定义错误页面 SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请…

大唐国际务实迎战两会保电,智能巡检机器人助力电力保障

全国两会召开在即。近年来&#xff0c;我国两会期间电力供应稳定性备受关注。作为国家重要的政治盛会&#xff0c;两会的顺利召开需要可靠的电力保障&#xff0c;以确保会议期间各项活动的正常进行。大唐国际作为国内领先的电力企业&#xff0c;面临着如何保障两会期间电力供应…

【b站咸虾米】ES6 Promise的用法,ES7 async/await异步处理同步化,异步处理进化史

课程地址&#xff1a;【ES6 Promise的用法&#xff0c;ES7 async/await异步处理同步化&#xff0c;异步处理进化史】 https://www.bilibili.com/video/BV1XW4y1v7Md/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 图文地址&#xff1a;https://www.b…

AI产品摄影丨香水

AI电商产品拍摄丨&#xff08;可指定产品&#xff09; 均为概念图 可换产品 可指定产品&#xff0c;可换logo 工具&#xff1a;StartAI 搭配“手机摄影”风格使用效果更佳哦 咒语&#xff1a;anha perfume in bottle on stone surface, in the style of everyday american…

RPC——远程过程调用

一、RPC介绍 1.1 概述 RPC&#xff08;Remote Procedure Call Protocol&#xff09; 远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务&#xff0c;不需要了解底层网络技术的协议。RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。 1.2 RPC框架 …

Grafana dashboards as ConfigMaps

文章目录 1. 简介2. 创建 configmaps3. grafana 界面查看 1. 简介 将 Grafana 仪表板存储为 Kubernetes ConfigMap 相比传统的通过 Grafana 界面导入仪表板有以下一些主要优点: 版本控制&#xff1a; ConfigMap 可以存储在版本控制系统(如Git)中,便于跟踪和管理仪表板的变更历…

Docker:部署微服务集群

1. 部署微服务集群 实现思路&#xff1a; ① 查看课前资料提供的cloud-demo文件夹&#xff0c;里面已经编写好了docker-compose文件 ② 修改自己的cloud-demo项目&#xff0c;将数据库、nacos地址都命名为docker-compose中的服务名 ③ 使用maven打包工具&#xff0c;将项目…

集合拆分Lists.partition的使用

集合拆分Lists.partition的使用 集合拆分Lists.partition的使用 需要的包 import com.google.common.collect.Lists;引入maven依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>21.0</…

动态规划(算法竞赛、蓝桥杯)--数位DP数字游戏

1、B站视频链接&#xff1a;E36 数位DP 数字游戏_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N12; int a[N];//把整数的每一位数字抠出来&#xff0c;存入数组 int f[N][N];//f[i][j]表示一共有i位&#xff0c;且最高位数字是j的不降数…

类和对象 02【C++】

文章目录 一、 构造函数(初始化列表)1. 初始化列表2. explicit 关键字3. static成员 二、 友元1. 友元函数2.友元类 三、 内部函数四、 匿名对象五、 拷贝对象时的一些编译器优化 一、 构造函数(初始化列表) 进一步理解构造函数&#xff0c;我们知道创建对象时&#xff0c;编译…

5G与智慧文旅的融合发展:推动旅游业转型升级与可持续发展

随着5G技术的飞速发展和广泛应用&#xff0c;其与智慧文旅的融合发展正成为推动旅游业转型升级与可持续发展的重要力量。5G技术以其高速率、低时延、大连接的特性&#xff0c;为智慧文旅注入了新的活力&#xff0c;助力旅游业实现更高效、更智能、更绿色的发展。本文将深入探讨…

力扣--从前序与中序遍历序列构造二叉树

题目&#xff1a; 思想&#xff1a; 首先先序遍历能确定根节点的值&#xff0c;此时查看该值在中序遍历中的位置&#xff08;如果索引为i&#xff09;&#xff0c;那么i左侧为左子树&#xff0c;i 右侧为右子树。从中序数组中即可看出左子树结点个数为 i&#xff0c;右子树节点…

Galxe:被低估的加密市场掘金地+Web3门户

在BTC ETF获得 SEC 的批准之后&#xff0c;机构资金大量买入推动BTC上涨&#xff0c;并带动整个加密市场回暖进入牛市。那么&#xff0c;对于习惯了熊市保守心态的投资者来说&#xff0c;接下来如何转换策略适应牛市&#xff1f;对即将进场的Web2用户来说&#xff0c;如何玩赚W…

Git小册-笔记迁移

Git简介 Git是目前世界上最先进的分布式版本控制系统&#xff08;没有之一&#xff09;。 所有的版本控制系统&#xff0c;其实只能跟踪文本文件的改动&#xff0c;比如TXT文件&#xff0c;网页&#xff0c;所有的程序代码等等&#xff0c;Git也不例外。版本控制系统可以告诉…

【elementplus】el-image图片预览的显示不全问题(和el-table、el-dialog组合使用时)

问题&#xff1a; 在和el-table、el-dialog组合使用时&#xff0c;el-image图片预览的时候&#xff0c;会可能出现显示不全图片的情况。 解决方法&#xff1a; <el-image-viewer:z-index"3000":teleported"true"/>element文档中有属性&#xff1a;…

vue2的element UI 表格单选

代码 this.$refs.multipleTable.toggleRowSelection(selection.shift(), false);multipleTable 是定义的表格的ref

【贪玩巴斯】关于在colab中上传本地csv使用方法(不用云)

有三种方法&#xff0c;但是这一种是最方便的。 当CSV文档在本地电脑&#xff0c;只需要输入以下代码&#xff08;个人建议在首行&#xff09;&#xff1a; from google colab import files uploadedfilesupload() 然后点击Choose Files 选择CSV文档&#xff08;注意文件是…