当前位置: 首页 > article >正文

Vue3+TS+vite项目笔记1

vue2与vue3的比较

源码的升级

  • 使用Proxy代替defineProperty实现响应式。

  • 重写虚拟DOM的实现和Tree-Shaking

新的特性

  1. Composition API(组合API):

    • setup

    • refreactive

    • computedwatch

      ......

  2. 新的内置组件:

    • Fragment

    • Teleport

    • Suspense

      ......

  3. 其他改变:

    • 新的生命周期钩子

    • data 选项应始终被声明为一个函数

    • 移除keyCode支持作为v-on 的修饰符

      ......

基于 vue-cli 创建

点击查看官方文档

备注:目前vue-cli已处于维护模式,官方推荐基于 Vite 创建项目。

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version

## 安装或者升级你的@vue/cli 
npm install -g @vue/cli

## 执行创建命令
vue create vue_test

##  随后选择3.x
##  Choose a version of Vue.js that you want to start the project with (Use arrow keys)
##  > 3.x
##    2.x

## 启动
cd vue_test
npm run serve

基于 vite 创建

vite 是新一代前端构建工具,官网地址:https://vitejs.cn,vite的优势如下:

  • 轻量快速的热重载(HMR),能实现极速的服务启动。

  • TypeScriptJSXCSS 等支持开箱即用。

  • 真正的按需编译,不再等待整个应用编译完成。

  • webpack构建(下载完所有的包) 与 vite构建(点击当前页面才会下载对应的包)对比图如下:

  • 具体操作如下(点击查看官方文档)

## 1.创建命令
npm create vue@latest

nodejs卸载和安装:

直接在控制面板中进行卸载即可,然后选择需要的版本安装

全网最详细的 Node.js 卸载和安装教程_卸载node.js-CSDN博客
 

npm配置设置默认的镜像源:

npm config set registry https://registry.npmmirror.com/

查看当前使用的镜像源:

npm config get registry

刚开始打开这些文件的时候会报错,执行 npm i 命令,安装对应的包就可解决问题,如果还报错的情况下,再次打开项目,就不会有报错信息了,如果版本不正确,卸载nodejs文件,重新安装就行,或者解对应文件,让这些文件适配当前nodejs版本也行

// vue官方把所有需要配置的文件都声明好了,加上这段代码,ts就能够识别.txt语言了

下载安装devtools插件: 

极简插件官网_Chrome插件下载_Chrome浏览器应用商店

OptionsAPI 与 CompositionAPI

  • Vue2API设计是Options(配置)风格的。

  • Vue3API设计是Composition(组合)风格的。

Options API 的弊端

Options类型的 API,数据、方法、计算属性等,是分散在:datamethodscomputed中的,若想新增或者修改一个需求,就需要分别修改:datamethodscomputed,不便于维护和复用。

Composition API 的优势

可以用函数的方式,更加优雅的组织代码,让相关功能的代码更加有序的组织在一起。

setup介绍

setup 概述

setupVue3中一个新的配置项,值是一个函数,它是 Composition API “表演的舞台,组件中所用到的:数据、方法、计算属性、监视......等等,均配置在setup中。

特点如下:

  • setup函数返回的对象中的内容,可直接在模板中使用。

  • setup中访问thisundefined

  • setup函数会在beforeCreate之前调用,它是“领先”所有钩子执行的。

setup 的返回值

  • 若返回一个对象:则对象中的:属性、方法等,在模板中均可以直接使用(重点关注)。

  • 若返回一个函数:则可以自定义渲染内容,代码如下:

setup 与 Options API 的关系

- `Vue2` 的配置(`data`、`methos`......)中**可以访问到** `setup`中的属性、方法。
- 但在`setup`中**不能访问到**`Vue2`的配置(`data`、`methos`......)。
- 如果与`Vue2`冲突,则`setup`优先。

setup 语法糖

setup函数有一个语法糖,这个语法糖,可以让我们把setup独立出去,代码如下:

扩展:下面代码,还需要编写一个不写setupscript标签,去指定组件名字,比较麻烦,我们可以借助vite中的插件简化

  1. 第一步:npm i vite-plugin-vue-setup-extend -D

  2. 第二步:vite.config.ts,配置如下:

import { defineConfig } from 'vite'
import VueSetupExtend from 'vite-plugin-vue-setup-extend'

export default defineConfig({
  plugins: [ VueSetupExtend() ]
})

    3.第三步:<script setup lang="ts" name="Person"> 

person组件:

<template>
  <div class="person">
    <h2>姓名: {{ name }}</h2>
    <h2>年龄: {{ age }}</h2>
    <h2>地址: {{ address }}</h2>
    <button @click="changeName">修改姓名</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showTel">查看联系方式</button>
    <hr />
    <hr />
    <!-- <h1>测试1: {{ a }}</h1>
    <h1>测试2: {{ c }}</h1>
    <button @click="b">测试</button> -->
  </div>
</template>

<!-- <script lang="ts"> -->
// 这是选项式API,name,data,methods都是选项,vue3zh可以写vue2的语法 // export
default { // name: "Person", // beforeCreate() { // console.log("beforeCreate");
// }, // data() { // return { // a: 100, // c: this.name, // d: 900, // }; // },
// methods: { // b() { // console.log("b"); // }, // }, // setup() { //
console.log("@@", this); // setup函数中的this是undefined,Vue3中已经弱化this //
// 数据,原来是写在data中的,此时的name,age,tel都不是响应式的数据 // let name =
"张三"; // // let name = "张三"; //
直接这样写变量,页面不会有变化,数据不是响应式的,此时的name不是响应式 // let age =
18; //此时的age不是响应式 // let tel = "13888888888"; //此时的tel不是响应式 //
let address = "北京昌平区宏福苑 宏福科技园"; // let x = this.d; // // let x = d;
// 在setup中直接写vue2当中的语法会报错 // 方法 // function changeName() { //
name = "zhang-san"; // } // function changeAge() { // age += 1; // } // function
showTel() {} // // 将数据,方法交出去,模板中才可以使用 // return { name, age,
changeName, changeAge, showTel, address }; // setup的返回值也可以是一个渲染函数
// return function () { // return "hhah"; // }; // return () => { // return
"hhah"; // }; // }, // data() { // // vue2可以写vue3的写法 // return { // name:
"张三", // age: 18, // tel: "13888888888", // }; // }, // methods: { //
changeName() { // this.name = "zhangsan"; // }, // changeAge() { // this.age +=
1; // }, // showTel() { // alert(this.tel); // }, // }, // }; // //
<!-- </script> -->

<!-- 下面的写法是setup语法糖 -->
<!-- 可以通过插件来自定义当前组件的名字,不然就需要写上两个script,其中一个用来写上组件的名称name,另外一个用来写方法,属性,数据等 -->
<script lang="ts" setup name="Person123">
console.log("@@", this); // setup函数中的this是undefined,Vue3中已经弱化this
// 数据,原来是写在data中的,此时的name,age,tel都不是响应式的数据
let name = "张三";
// let name = "张三";  // 直接这样写变量,页面不会有变化,数据不是响应式的,此时的name不是响应式
let age = 18; //此时的age不是响应式
let tel = "13888888888"; //此时的tel不是响应式
let address = "北京昌平区宏福苑 宏福科技园";
// let x = this.d; //
// let x = d; // 在setup中直接写vue2当中的语法会报错
// 方法
function changeName() {
  name = "zhang-san";
}
function changeAge() {
  age += 1;
}
function showTel() {}
// 将数据,方法交出去,模板中才可以使用
// return { name, age, changeName, changeAge, showTel, address };
// setup的返回值也可以是一个渲染函数
// return function () {
//   return "hhah";
// };
// return () => {
//   return "hhah";
// };
</script>

<style scoped>
.person {
  background-color: skyblue;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
</style>

App.vue组件:

<template>
  <!-- html结构 -->
  <div class="app">
    <h1>你好啊!</h1>
    <Person />
  </div>
</template>

<script lang="ts">
import Person from "./components/Person.vue";
// JS或TS
export default {
  name: "App", //组件名
  components: { Person }, // 注册组件
};
</script>

<style>
/* 样式 */
.app {
  background-color: #ddd;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
</style>


http://www.kler.cn/a/488228.html

相关文章:

  • Vue3+Element给表单设置多个验证+规则Rules自定义
  • hive数据迁移
  • 51单片机——串口通信(重点)
  • 本地手集博客id“升级”在线抓取——简陋版——(2024年终总结1.1)
  • 有关Redis的相关概述
  • Yolo11改进:注意力改进|Block改进|ESSAformer,用于高光谱图像超分辨率的高效Transformer|即插即用
  • 实战设计模式之桥接模式
  • Gin框架中间件原理
  • 24级 秋季学期期末考试安排(专升本)
  • 计算机网络(二)——物理层和数据链路层
  • Lua语言的文件IO
  • Decord - 深度学习视频加载器
  • OpenCV计算机视觉 07 图像的模块匹配
  • 从configure.ac到构建环境:解析Mellanox OFED内核模块构建脚本
  • LeetCode 3042. Count Prefix and Suffix Pairs I
  • 资源编排:云时代的高效管理工具,助力企业智能运维
  • react ts 定义基本类型,组件通过ref调用时类型提示
  • 如何解决 VS Code 调试时无法查看 std 中变量的问题
  • pgsql 连接数查看、释放
  • 【AniGS】论文阅读
  • Docker 通过创建Dockerfile 部署Jar包
  • MATLAB对文件处理
  • springboot整合gateway
  • 多云架构,JuiceFS 如何实现一致性与低延迟的数据分发
  • [IoT]解决方案设计:智能农业监控系统
  • pytorch模型的保存失敗しましたが、