vue3基础语法

news2024/11/25 0:51:36

2020年9月18日发布

2022年2月7日称为默认版本,意味vue3是现在也是未来

Ant Design Pc端组件库

Element Plus Pc端组件库

Vant 移动端

VueUse 基于composition 组合式api的常用函数集合

vue3中文文档:https://cn.vuejs.org/guide/introduction.html

1. vue3特点

  • Composition API 组合API
  • 首次渲染更快
  • diff算法更快
  • 内存占用更小
  • 打包体积更小
  • 更好的TypeScript支持

2. vue3项目的创建

  • vue-cli脚手架创建—webpack

需要查找依赖,打包所有的模块,然后才能提供服务,更新速度会随着代码体积增加越来越慢
在这里插入图片描述

vue create xxx
  • vite构建工具

    vite 意为 ‘快速的’,是一种新型的前端构建工具

    使用原生ESModule通过script标签动态导入,访问页面的时候加载到对应模块编译并响应
    在这里插入图片描述
    注明:项目打包的时候最终还是需要打包成静态资源,打包工具Rollup

3.vite创建项目

npm create vite@latest

yarn create vite

pnpm create vite

4.代码分析

vue3组件代码和vue2不一样,使用的语法提示和高亮插件也是不一样

vetur插件禁用 安装Vue Language Features (Volar)插件

vue3写法不同

  • 组件一个根节点非必需

  • 创建应用挂载到根容器

  • 入口页面,ESM加载资源

    <body>
        <div id="app"></div>
        <script type="module" src="/src/main.ts"></script>
      </body>
    

组合式API

在这里插入图片描述
vue3提供了两种组织代码逻辑的写法:

  • 通过data,methods,watch等配置选项组织代码逻辑 是选项API的写法
  • 所有逻辑在setup函数中,使用ref,reactive等函数组织代码 是 组合式API写法

option api

<template>
  <div>
    <button @click="toggle">显示隐藏</button>
    <img v-if="show" src="./assets/logo.png" />
    <div @click="increment">{{ count }}</div>
  </div>
</template>
<script>
 export default {
  data(){
    return {
      show:true,
      count:0
    }
  },
  methods:{
    toggle(){
      this.show=!this.show
    },
    increment(){
      this.count++
    }
  }
 }
</script>

组合式api

<template>
  <div>
    <button @click="toggle">显示隐藏</button>
    <img v-if="show" src="./assets/logo.png" />
    <div @click="increment">{{ count }}</div>
  </div>
</template>
<script setup>
import {ref} from 'vue'
let show =ref(true)
const toggle=()=>{
  show.value =!show.value
}
let count = ref(0)
const increment=()=>{
  count.value++
}
</script>

setup

  • setup函数是vue3特有的选项,作为组合式api的起点
  • 从组件生命周期来看,setup在beforeCreate之前执行
  • 函数中this不是组件实例 是undefined
  • 如果数据或者函数在模板中使用,需要在setup中返回
<script>
import {ref} from 'vue'
export default{
  setup(){
    console.log("setup")
    let show =ref(true)
    const toggle=()=>{
      show.value =!show.value
    }
    let count = ref(0)
    const increment=()=>{
      count.value++
      console.log(this)
    }

   return {show,toggle,count,increment}
  },
  beforeCreate(){
    console.log("beforeCreate")
  }
}
</script>

setup语法糖

<script setup>
import {ref} from 'vue'
    let show =ref(true)
    const toggle=()=>{
      show.value =!show.value
    }
    let count = ref(0)
    const increment=()=>{
      count.value++
      console.log(this)
    }
</script>

reactive

  • 使用reactive函数传入一个普通对象,返回一个响应式数据对象
  • 可以转换简单数据吗?? 不能
<template>
  <div>
     <p>姓名:{{ state.name }}</p>
     <p>年龄{{ state.age }}</p>
     <button @click="change">更改</button>
  </div>
</template>

<script setup>
// 1.vue中导出reactive函数
import {reactive} from 'vue'

// 使用reactive函数,传入一个普通对象,返回一个响应式数据对象
const state =reactive({name:"lucy",age:23})

const change = ()=>{
  state.age=34
  state.name ="牛牛"
}
</script>

ref

  • 使用ref函数,传入普通数据 or 复杂 ,返回一个响应式数据
  • 注意,使用ref创建的数据,js中需要.value ,template中可省略
<template>
  <div>
     <p>姓名:{{ state.name }}</p>
     <p>{{count}}</p>
     <button @click="change">更改</button>
  </div>
</template>

<script setup>
// 1.vue中导出ref函数
import {reactive,ref} from 'vue'
// 2.使用ref函数 传入普通数据 or 复杂  返回一个响应式数据
let count = ref(0)
let state = ref({name:'lucy'})

const change = ()=>{
  // js中使用需要.value
  count.value += 3
  state.value.name ='zs'
}
</script>

reactive可以转换对象为响应式数据,但是不支持简单数据类型
ref可以转换简单数据类型为响应式数据,也支持复杂数据类型 但是操作的时候需要.value
【推荐】如果能确定数据是对象且字段名称也确定,使用reactive,其他使用ref

案例

<template>
 <button @click="toggle">显示隐藏图片</button>
 <img src="./assets/vue.svg" alt="" v-show="show">
 <hr/>
 计数器{{ count }} <button @click="change">累加</button>
</template>
<script setup>
import {ref} from 'vue'

let count = ref(0)
let show = ref(true)

const toggle = ()=>{
  show.value = !show.value
}
const change = ()=>{
  count.value ++
}
</script>

computed

<template>
  <div>
    <p>{{ scoreList }}</p>
    <p>{{ betterList }}</p>

    <input type="checkbox" v-model="allCheck" />
    <ul>
      <li v-for="item in arr" :key="item.id">
        <input type="checkbox" v-model="item.flag" />{{ item.name }}
      </li>
    </ul>
  </div>
</template>
<script setup>
 import {ref,reactive,computed} from 'vue'
 const scoreList = ref([12,80,100,90,70,60])
//  计算属性
const betterList = computed(()=>scoreList.value.filter(item=>item>90))

const arr = ref([
  {id:1,name:'aaa',flag:true},
  {id:2,name:'bbb',flag:true},
  {id:3,name:'ccc',flag:false},
  {id:4,name:'ddd',flag:true}
])
// 完整写法
const allCheck=computed({
    get(){
      return arr.value.every(item=>item.flag==true)
    },
    set(v){
      arr.value.forEach(item=>{
        item.flag=v
      })
    }
})

// 改变数据  计算属性改变
// setInterval(()=>{
//   scoreList.value.push(90,92)
// },1000)
</script>

watch

<template>
  <div>
 {{ count }}---{{ user.info.age}}---{{ user.name }}
  </div>
</template>
<script setup>
import {ref,watch,reactive} from 'vue'
const count =ref(0)
const user=reactive({
  name:'tom',
  info:{
    gender:"男",
    age:14
  }
})

// 1.监听一个响应式数据
// watch(数据,改变后回调函数)

// watch(count,()=>{
//   console.log("count改变了")
// })



// 2.监听多个响应式数据
// watch([数据1,数据2...],回调函数)

// watch([count,user],()=>{
//   console.log("数据改变了")
// })

// setTimeout(()=>{
//   count.value++
// },1000)

// 3.监听响应式对象数据的一个属性  简单类型

watch(
  ()=>user.name,
  ()=>{
  console.log("数据改变")
},
{
  immediate:true   //默认执行一次
}
)



// 4.监听响应式对象数据的一个属性  复杂类型

watch(
  ()=>user.info,
  ()=>{
    console.log("数据改变了")
  },
  {
    // 开启深度监听
    deep:true
  }
)

// watch(需要监听的数据,数据改变的函数,配置对象)


// setTimeout(()=>{
//   // user.info.age++
//   user.name = 'zs'
// },3000)

setTimeout(()=>{
  user.info.age++
  // user.name = 'zs'
},2000)
</script>

生命周期函数

  • vue3中生命周期钩子函数可以调用多次

对比

选项式API组合式API
beforeCreate不需要 (直接写到setup函数中)
created不需要 (直接写到setup函数中)
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeDestroyedonBeforeUnmount
destroyedonUnmounted
activatedonActivated
deactivatedonDeactivated
<template>
  <div>
    生命周期
  </div>
</template>
<script setup>
 import {onMounted} from 'vue'

 onMounted(()=>{
    console.log(1)
 })
 onMounted(()=>{
  console.log(2)
})
</script>

ref获取Dom元素

  • 1.创建ref const hRef = ref(null)
  • 2.模板中建立关联 <组件 ref = “hRef”/>
  • 3.使用 hRef.value
<template>
  <div>
     <h1 ref="hRef">我是标题</h1>
     <HelloWorld ref="myRef"></HelloWorld>
  </div>
</template>
<script setup>
import HelloWorld from './components/HelloWorld.vue';
 import {ref,onMounted} from 'vue'
 
//  1创建
 const  hRef = ref(null)
const myRef = ref(null)

onMounted(()=>{
  console.log(myRef.value)
})
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pandas_datareader读取yahoo金融数据超时问题timeout解决方案

在《Python金融数据挖掘》一书中&#xff0c;学习到网络数据源这一章节&#xff0c;利用书中的方法安装了pandas_datareader包&#xff0c;但在获取雅虎数据&#xff08;get_data_yahoo&#xff09;时会出现以下问题&#xff1a; 经过仔细分析和尝试&#xff0c;排除了yahoo受中…

2023年中国智能电视柜产量、需求量、市场规模及行业价格走势[图]

电视柜是随着电视机的发展和普及而演变出的家具种类&#xff0c;其主要作用是承载电视机&#xff0c;又称视听柜&#xff0c;随着生活水平的提高&#xff0c;与电视机相配套的电器设备也成为电视柜的收纳对象。 随着智能家具的发展&#xff0c;智能电视机柜的造型和风格都是有了…

2023/10/1 -- ARM

今日任务&#xff1a;select实现服务器并发 ser.c&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\printf("%d\n",__LINE__);\perror(msg);\ }while(0)#define PORT 8888#define IP "192.168.1.5"int main(int argc, const char *argv[…

Java中DateTimeFormatter的使用方法和案例

&#x1f514;简介 在Java中,DateTimeFormatter类用于格式化和解析日期时间对象。它是日期时间格式化的强大而灵活的工具。 &#x1f514;作用 &#x1f335;1.本地化时间 本地化时间指根据指定的语言环境显示时间 1.1.创建DateTimeFormatter时指定Locale DateTimeFormatt…

ORA-01034: ORACLE not available?一文解决

1.情况描述 oracle用户sqlplus登陆数据库&#xff08;11gR2 单机asm&#xff09;&#xff0c;进去查询一些基本的视图发现报错 ORA-01034: ORACLE not available&#xff0c;详细如下 [oracleoomcserver db_1]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production…

ClassNotFoundException与NoClassDefFoundError

如果这springboot服务启动时两个报错同时出现&#xff0c;那大概率是依赖间冲突导致的 查资料发现是springcloud的依赖版本和springboot的依赖版本不兼容&#xff0c;顺藤摸瓜找到springcloud jar包中调用org.springframework.boot.context.properties.ConfigurationProperties…

酷开科技OTT大屏营销,做好价值塑造

洞察2023&#xff0c;随着技术与数据入局OTT领域&#xff0c;程序化投放、数据追踪、人群定位等等能力正逐步深入&#xff0c;围绕OTT大屏营销&#xff0c;新营销的价值也正在被重构。随着国内5G、人工智能、云计算等技术不断普及&#xff0c;大屏营销服务成为OTT行业发展的主流…

笔试强训Day9

T1&#xff1a;走方格的方案数 链接&#xff1a;走方格的方案数_牛客题霸_牛客网 (nowcoder.com) 描述 请计算n*m的棋盘格子&#xff08;n为横向的格子数&#xff0c;m为竖向的格子数&#xff09;从棋盘左上角出发沿着边缘线从左上角走到右下角&#xff0c;总共有多少种走法…

SpringCloud Alibaba - Sentinel 微服务保护解决雪崩问题、Hystrix 区别、安装及使用

目录 一、Sentinel 1.1、背景&#xff1a;雪崩问题 1.2、雪崩问题的解决办法 1.2.1、超时处理 缺陷&#xff1a;为什么这里只是 “缓解” 雪崩问题&#xff0c;而不是百分之百解决了雪问题呢&#xff1f; 1.2.2、舱壁模式 缺陷&#xff1a;资源浪费 1.2.3、熔断降级 1.…

【汇编的救赎】汇编语言入门必看基本知识点

汇编语言是一种低级语言&#xff0c;用于编写计算机程序。它直接操作计算机硬件&#xff0c;提供了对处理器寄存器、内存和指令等底层资源的直接访问。汇编语言的语法简单明了&#xff0c;每条指令都对应着一条机器指令&#xff0c;具有高度的灵活性和效率。通过汇编语言&#…

MySQL SQL性能分析(SQL优化 一)

在开发和维护数据库应用程序时&#xff0c;优化SQL查询的性能是至关重要的。MySQL提供了一些强大的工具和技术&#xff0c;帮助我们进行SQL性能分析&#xff0c;找出潜在的瓶颈并进行相应的优化。 查看SQL的执行频率 show [ session| global ] status 命令查看服务器状态信息…

web:[RoarCTF 2019]Easy Calc

题目 进入页面是一个计算器的页面 随便试了一下 查看源代码看看有什么有用的信息 访问一下这个calc.php 进行代码审计 <?php error_reporting(0); if(!isset($_GET[num])){show_source(__FILE__); }else{$str $_GET[num];$blacklist [ , \t, \r, \n,\, ", , \[, \]…

Python语言:函数的使用

按我的理解&#xff0c;编程世界中的函数就是一个模块&#xff1a;提前写好一个特动功能&#xff0c;方便以后直接调用且实现其功能&#xff0c;可以大大提高工作效率。 今天我们通过一个python语言的函数使用小案例来进一步加深对函数的理解。案例名字为S的银行之行。S是一个吝…

1.6.C++项目:仿muduo库实现并发服务器之channel模块的设计

项目完整版在&#xff1a; 文章目录 一、channel模块&#xff1a;事件管理Channel类实现二、提供的功能三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 四、代码&#xff08;一&#xff09;框架&#xff08;二…

Mac卸载不了软件怎么办?2023年最新MacBook卸载大集合

很多朋友在卸载软件的时候&#xff0c;可能会遇到卸载不了的情况。软件正在使用、软件来自第三方等原因都可能导致我们无法将其成功卸载。本篇文章就将告诉您“Mac卸载不了软件”的解决办法。 为什么Mac卸载不了软件&#xff1f; Mac卸载不了软件的原因很多&#xff0c;常见的…

Excel如何快速将表格纵向数据变成横向

第一&#xff0c;打开Excel文件&#xff0c;我们看到表格里面的内容为纵向排列&#xff1b; 第二&#xff0c;要将表格纵向排列变成横向&#xff0c;首先选中单元格内容&#xff0c;按CTRLC快速复制。 第三&#xff0c;选中一个空白单元格&#xff0c;点击鼠标右键&#xff0c;…

SentenceTransformer 之论文解读

摘要 原文标题&#xff1a;Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks 链接&#xff1a;https://arxiv.org/pdf/1908.10084.pdf 尽管Bert和RoBERTa在句子对回归任务上&#xff0c;例如语义文本相似度&#xff08;Semantic Text Similarity&#xff09;…

300元以内最好的开放式耳机是哪款、百元开放式耳机推荐

如果你是一位运动用户&#xff0c;或者耳道比较敏感的用户&#xff0c;耳机一定要选开放式的。开放式耳机的优点是在听歌的能够兼顾环境音&#xff0c;避免户外运动时出现的安全问题。在耳机的佩戴上舒适性上也比入耳式耳机好&#xff0c;不会对耳朵造成压迫导致不适。不足是音…

高效记录,事项井然——OmniOutliner 5 Pro for Mac 信息大纲记录工具

OmniOutliner 5 Pro for Mac 是一款强大的信息大纲记录工具&#xff0c;帮助您高效组织和管理各种信息。无论是个人笔记、工作计划、项目管理还是学习资料&#xff0c;这款应用都能满足您的需求&#xff0c;并使您的日常工作更加井然有序。 OmniOutliner 5 Pro 提供了一套丰富…

为何每个开发者都在谈论Go?

目录 一、引言Go的历史回顾关键时间节点 使用场景Go的语言地位技术社群与企业支持资源投入和生态系统 二、简洁的语法结构基本组成元素变量声明与初始化代码示例 类型推断函数与返回值代码示例输出 接口与结构体&#xff1a;组合而非继承错误处理&#xff1a;明确而不是异常小结…