您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

Vue3.2 语法基础详解

时间:2022-08-08 13:55:36  来源:  作者:重庆源码时代

前言

官网地址:
https://staging-cn.vuejs.org/

vue最新版分为两个版本: Vue3.0(20年9月18日) Vue 3.2 (21年8月10日)

#Vue 3.2 +Vite+volar

Vue3 框架做了大量的性能优化,包括虚拟 DOM,编译模板、代理的新数据监听,体积更小的打包文件等。

新的组合式 API (composition-api),更适合大型项目的构建,去除繁琐的 this 操作;

由于是基于 TypeScript 编写,对 TypeScript 原生支持更好,更强大的智能类型推导功能;

生命周期的一些改变,vue2 中的 beforeCreate 和 created 被一个新增的 setup 生命周期函数代替;

一些常见 API 如 v-model 的变化,支持对一个组件同时进行多个 v-model 的数据绑定。

vscode 的插件 vetur 对vue3 的composition API语法支持度非常弱,所以开发vue3项目需要将vetur禁用 更换另一个插件

开发vue3安装并使用: volar 插件

#1.项目创建

Vite 官网:https://cn.vitejs.dev/

yarn create vite my-vue-App --template vue     

#2.SFC 单文件组件

html 部分变化不大

vue2的 template 中只能有一个子节点,vue3的 template 中可以写多个子节点

js 部分内置ts,但是vite创建的项目没有开启 , <script lang="ts" setup> 这样写即可支持ts

新增setup 语法糖,js代码大量简化

代码中不再出现 this

css 代码中 可以使用v-bind 指令

<template>    <div>    </div></template><script setup>       let color = '#f60';</script><style scoped>.box{  width: 100px;  height: 100px;  background: v-bind(color);}</style>

#2. setup语法糖

起初 Vue3.0 暴露变量必须 return 出来,template中才能使用; 这样会导致在页面上变量会出现很多次。

vue3.2只需在script标签中添加setup,可以帮助我们解决这个问题。

1.组件只需引入不用注册,属性和方法也不用返回, 也不用写setup函数,也不用写export default , 甚至是自定义指令也可以在我们的template中自动获得。

#3.data 定义

#3.1 直接定义 无响应式

<template>  <div>      <h1>{{name}}</h1>      <!-- 这里双向绑定失效,直接定义变量没有响应式特性 -->      <input type="text" v-model="name">  </div></template><script setup>  let name = '张麻子';</script>

#3.2 ref 定义基本数据类型 有响应式

<template>  <div>      <h1>{{name}}</h1>       <!-- 修改数据 有响应式 -->      <input type="text" v-model="name">      <button @click="setData">修改数据</button>  </div></template><script setup> import {ref} from 'vue';        let name = ref('张麻子');   //js中修改数据有响应式 const setData = ()=>{     name.value = '黄四郎' }     </script>

#3.3 reactvie 定义引用数据类型 有响应式

<template>  <div>      <h2>{{user.name}}</h2>      <!-- 修改数据 有响应式 -->      <input type="text" v-model="user.name">      <!-- 新增属性 -->      <button @click="addItem">新增属性</button>  </div></template><script setup>import {ref,reactive} from 'vue'let user = reactive({  name:'张麻子',  age:40})// js中新增对象属性-可以直接赋值和修改(有响应式),在ts环境下,vscode会提示错误,但在页面中可以正常渲染const addItem = ()=>{  user.like='打豆豆'}</script>

#4.methods 方法定义

<template>  <div>    <!-- 年龄 + -->    <h1>{{user.age}}</h1>    <!-- 调用方法 -->    <button @click="addAge">年龄+</button>  </div></template><script setup>import { ref, reactive } from "vue";let user = reactive({  name: "张麻子",  age: 40,});//方法const addAge=()=>{    user.age++;}//方法调用方法const getUserInfo=()=>{  addAge()  console.log(user.age)}</script>

#5.computed 计算属性

<script setup>import { ref, reactive, computed } from "vue";let user = reactive({  name: "张麻子",  age: 40,});//计算属性const getAge = computed(()=>{  return '我的年龄'+user.age})</script>

#6.watch 使用

watch(监听数据源,执行函数,[配置参数])    //配置参数: 立即执行 深度监听{immediate: true, deep: true }

#6.1 监听基本数据类型单一数据源

<script setup>import {ref, watch} from 'vue' let name = ref('张麻子') //监听器watch(name,(newVal,oldVal)=>{    console.log('变量发生了改变...',newVal);})</script>

#6.2 监听引用数据类型单一数据源

<script setup>import {reactive, ref, watch} from 'vue'let user = reactive({name:'张三',age:14}) //监听器watch(()=>user.name,(newVal,oldVal)=>{  console.log('对象user中的name属性发生了变化..',newVal);})</script>

#6.3 监听引用数据类型 多数据源[深度监听]

<template>  <div>    <button @click="addNum()"> 添加随机数</button>    <div v-for="item in nums" :key="item">{{ item }}</div>  </div></template><script setup>import { reactive, ref, watch } from 'vue'let nums = reactive([]);//添加随机数const addNum = () => {  let num = Math.ceil(Math.random() * 100);  nums.push(num);}//监听数组变化-深度监听watch(()=>nums,(newVal,oldVal)=>{    console.log('nums数组发生了变化..',newVal);},{deep:true})</script>

#7.生命周期

vue2

vue3.0

vue3.2

备注

beforeCreate

 

setup

组件创建之前 可以获取顶级实例对象

created

 

setup

组件创建完成,可以获取变量

beforeMount

 

onBeforeMount

挂载前,VNdom创建完成,真实dom未渲染

mounted

 

onMounted

挂载完成,真实dom创建完成,可以获取dom

beforeUpdate

 

onBeforeUpdate

dom更新前触发

updated

 

onUpdated

dom更新完成触发

beforedestroy,destroyed

beforeUnmount

onBeforeUnmount

组件卸载后触发 所有的挂载的数据 子组件全部卸载后触发

 

errorCaptured

onErrorCaptured

在捕获一个来自后代组件的错误时被调用

 

renderTracked

onRenderTracked

跟踪虚拟 DOM 重新渲染时调用

 

renderTriggered

onRenderTriggered

当虚拟 DOM 重新渲染被触发时调用

activated

activated

onActivated

缓存组件激活时调用

deactivated

deactivated

onDeactivated

缓存组件失活时调用

<template>  <div>      <div class="box"></div>  </div></template><script setup>import { onMounted } from 'vue';  //生命周期钩子监听  onMounted(()=>{    console.log(document.querySelector('.box')); //可以获取dom  })</script>

#8.组件使用

  • 创建 src/components/Son.vue
  • App.vue中导入并使用该组件
  • vue3.2 中当我们导入子组件时,setup语法糖会自动去注册该组件,所以注册语句不用写了。
<template>  <div>    <son></son>  </div><script setup>import Son from './components/Son.vue'</script>

#9.组件通信

#9.1 父传子 defineProps

  • 父组件
<template>  <div>      <Son class="box" title="我是父组件传递的标题" :likes="likes"></Son>  </div></template><script setup>  import Son from './components/Son.vue'  let likes = ['张三','李四']</script>
  • 子组件
<script setup>const props=defineProps({    title:{        type:String,        default:''    },    likes:{        type:Array,        default:()=>[]    }})</script>

#9.2 子传父 defineEmits

  • 子组件
<template>    <div>        <button @click="sendData">传递数据</button>    </div></template><script setup>//定义自定义事件const emit = defineEmits(['send'])//自己的事件执行函数const sendData = () => {    //执行自定义事件    emit('send', '我是儿子组件传递的数据')}</script>
  • 父组件
<template>  <div>      <Son class="box"  @send="getData" ></Son>  </div></template><script setup>  import Son from './components/Son.vue'  //触发自定义事件-接收数据  const getData = (data)=>{    console.log(data);  }</script>


Tags:Vue3.2   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Vue3.2 setup语法糖、Composition API归纳总结
Vue3.2 setup语法糖、Composition API归纳总结 起初 Vue3.0 暴露变量必须 return 出来,template中才能使用。 Vue3.2 中 只需要在 script 标签上加上 setup 属性,组件在编译的...【详细内容】
2023-03-21  Search: Vue3.2  点击:(62)  评论:(0)  加入收藏
Vue3.2 语法基础详解
前言官网地址: https://staging-cn.vuejs.org/vue最新版分为两个版本: Vue3.0(20年9月18日) Vue 3.2 (21年8月10日)#Vue 3.2 +Vite+volarVue3 框架做了大量的性能优化,包括虚拟 DOM...【详细内容】
2022-08-08  Search: Vue3.2  点击:(683)  评论:(0)  加入收藏
▌简易百科推荐
20k级别前端是怎么使用LocalStorage的,想知道吗?
当咱们把咱们想缓存的东西,存在localStorage、sessionStorage中,在开发过程中,确实有利于咱们的开发,咱们想看的时候也是一目了然,点击Application就可以看到。前言大家好,我是林...【详细内容】
2024-03-26  前端之神  微信公众号  Tags:前端   点击:(14)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  机器之心Pro    Tags:前端   点击:(17)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown &mdash;&mdash; 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  OSC开源社区    Tags:Vue   点击:(23)  评论:(0)  加入收藏
两年前端经验还不会手写Promise?
什么是promise?当我们处理异步操作时,我们经常需要进行一系列的操作,如请求数据、处理数据、渲染UI等。在过去,这些操作通常通过回调函数来处理,但是回调函数嵌套过多会导致代码...【详细内容】
2024-03-07  海燕技术栈  微信公众号  Tags:Promise   点击:(31)  评论:(0)  加入收藏
网站开发中的前端和后端开发有什么区别
前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有...【详细内容】
2024-02-21  CarryData    Tags:前端   点击:(37)  评论:(0)  加入收藏
网站程序开发中的前后端分离技术
随着互联网的快速发展和技术的不断创新,传统的网站开发模式已经难以满足日益增长的业务需求。为了提高开发效率、增强系统的可维护性和可扩展性,前后端分离技术逐渐成为了网站...【详细内容】
2024-01-31  网站建设派迪星航    Tags:前后端分离   点击:(27)  评论:(0)  加入收藏
如何优雅的实现前端国际化?
JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库!i18nexti18ne...【详细内容】
2024-01-17  前端充电宝  微信公众号  Tags:前端   点击:(78)  评论:(0)  加入收藏
Vue中Scope是怎么做样式隔离的?
scope样式隔离在 Vue 中,样式隔离是通过 scoped 特性实现的。当在一个组件的 <style> 标签上添加 scoped 特性时,Vue 会自动为这个样式块中的所有选择器添加一个唯一的属性,以...【详细内容】
2024-01-04  海燕技术栈  微信公众号  Tags:Vue   点击:(85)  评论:(0)  加入收藏
vue3中 ref和 reactive的区别 ?
最近有朋友在面试过程中经常被问到这么一个问题,vue3 中的ref 和 reactive的区别在哪里,为什么 要定义两个API 一个 api不能实现 响应式更新吗??带着这个疑问 ,我们 接下来进行逐...【详细内容】
2024-01-03  互联网高级架构师  今日头条  Tags:vue3   点击:(47)  评论:(0)  加入收藏
React18 与 Vue3 全方面对比
1. 编程风格 & 视图风格1.1 编程风格 React 语法少、难度大;Vue 语法多,难度小例如指令:Vue<input v-model="username"/><ul> <li v-for="(item,index) in list" :key="inde...【详细内容】
2024-01-03  爱做梦的程序员  今日头条  Tags:Vue3   点击:(78)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条