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

Vue3学习体验(一)

搭建工程

使用vue-cli脚手架创建vue3工程

vue create vue3-app-vue-cli

Vue-cli官网:https://cli.vuejs.org/zh/guide/installation.html

使用vite搭建vue3工程

npm init表示临时的下载vite应用来创建vue3工程,工程名称为vue3-app-vite

npm init vite-app vue3-app-vite

注意:以上方式不是全局安装。

两种方式搭建工程的区别

  • vue-cli搭建的工程
    • import引入时,可以省略文件后缀名,如import App from './App'
    • 页面文件index.html放在public目录中
  • vite搭建的工程
    • import引入时,除了js文件不需要加.js后缀外其他文件引入时都要加后缀名,如:import App from './App.vue'
    • 页面文件index.html不再放入public目录中,而是放在根目录下,其他的静态资源还是放在public目录下(原封不到生成到打包结果的那些)

二者打包后生成的dist目录结构也不一样。

Vue3变化

总结一些细节变化,不涉及底层原理。

没有 Vue 构造函数了

Vue2 中

import App from "./App.vue";
const app = new Vue(options)
Vue.use()
app.$mount("#app")

这种构造函数方式创建 Vue 更像是一个组件实例,里面有很多属性等,有很多是 $_开头的属性。

采用具名导出

Vue3中

import { createApp } from "vue";

createApp 表示创建一个应用

这种更新好像叫做 breaking 截断式更新,意思是不再兼容老版。

const app = createApp(App);
app.mount("#app");

这种函数式的创建 Vue,得到的是一个非常纯净的实例对象、一个 Vue 应用对象,里面只提供了必须的、会用到、要用到的方法,那些不太会用到的方法被去掉了。

使用插件方式不同

Vue2 中,Vue.use(插件),使用的是 Vue 构造函数上的静态方法。
Vue3 中,app.use(插件),使用的是const app = createApp(App);创建的实例对象的方法。

this不同

Vue2 中 this 指向 Vue 构造函数的实例对象,而 Vue3 中 this 指向的是一个 proxy 代理对象。
在这里插入图片描述
但是,
在 Vue3 中我们一般会使用 setup 函数,而在setup函数中,this 指向 undefined

<template><p></p>
</template><script>
export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefinedreturn {};},
};
</script>

选项式与组合式

Vue2 是选项式 Api
在这里插入图片描述
Vue3 是组合式 Api
在这里插入图片描述

Vue3 中的 setup 函数

<template><h1>count:{{ count }}</h1><p><button @click="decrease">decrease</button><button @click="increase">increase</button></p>
</template><script>
export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefinedlet count = 0;const increase = () => {count++;}const decrease = () => {count--;};// setup中,count是一个对象// 实例代理中,count是一个count.valuereturn {count,increase};},
};
</script>

setup 函数中 return 返回的对象中的属性会被附着到组件实例中。
此时,count 值变化不会触发视图更新,因为 count 不是一个响应式数据。

Vue3 中的数据响应式

如何将上述的 count 变量转成响应式?
Vue3 中提供了一些响应式 Api 来对数据做响应式处理。
修改上面的代码,如下:

<template><h1>count:{{ countRef }}</h1><p><button @click="decrease">decrease</button><button @click="increase">increase</button></p>
</template><script>
import { ref } from "vue";
export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefined// setup中,count是一个对象// 实例代理中,count是一个count.valuelet countRef = ref(0);const increase = () => {countRef.value++;};const decrease = () => {countRef.value--;};return {countRef,increase,decrease,};},
};
</script>

setup 函数环境中,count 是一个对象
模板实例环境中、实例代理中,count 是一个 count.value
在这里插入图片描述
调整以上代码,使用函数封装 increase、decrease 操作逻辑

<template><h1>count:{{ countRef }}</h1><p><button @click="decrease">decrease</button><button @click="increase">increase</button></p>
</template><script>
import { ref } from "vue";function useCount() {let countRef = ref(0);const increase = () => {countRef.value++;};const decrease = () => {countRef.value--;};return {countRef,increase,decrease,};
}export default {setup() {// console.log("所有生命周期钩子函数之前调用");// console.log(this); // this -> undefined// setup中,count是一个对象// 实例代理中,count是一个count.value//1. 新增//2. 修改//3. 删除return {...useCount(),};},
};
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Reinforced Causal Explainer for GNN论文笔记
  • python基础语法 005 函数1-2 函数作用域
  • Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git)
  • 使用Go编写的持续下行测速脚本,快速消耗流量且不伤硬盘
  • 【排序 】
  • 多元输出表达(MOE)
  • 静态搜索iOS动态链接函数的调用位置
  • 神经网络识别数字图像案例
  • 昇思训练营打卡第二十四天(LSTM+CRF序列标注)
  • uniapp 小程序注册全局弹窗组件(无需引入,无需写标签)
  • 缓存与分布式锁
  • T113-i 倒车低概率性无反应,没有进入倒车视频界面
  • Spring-Cache 缓存
  • Zookeeper背景优缺点,以及应用场景
  • 头歌资源库(32)n皇后问题
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 07.Android之多媒体问题
  • 0x05 Python数据分析,Anaconda八斩刀
  • 345-反转字符串中的元音字母
  • CSS 提示工具(Tooltip)
  • Django 博客开发教程 16 - 统计文章阅读量
  • HTML中设置input等文本框为不可操作
  • Java教程_软件开发基础
  • React的组件模式
  • Spring Cloud Feign的两种使用姿势
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 彻底搞懂浏览器Event-loop
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 记一次用 NodeJs 实现模拟登录的思路
  • 码农张的Bug人生 - 初来乍到
  • 入门到放弃node系列之Hello Word篇
  • 深入浅出webpack学习(1)--核心概念
  • 微信小程序设置上一页数据
  • 物联网链路协议
  • 小李飞刀:SQL题目刷起来!
  • ionic入门之数据绑定显示-1
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #if和#ifdef区别
  • #includecmath
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (09)Hive——CTE 公共表达式
  • (21)起落架/可伸缩相机支架
  • (26)4.7 字符函数和字符串函数
  • (Charles)如何抓取手机http的报文
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (二十六)Java 数据结构
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (计算机网络)物理层
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)平衡树