关于Vue3 ,看这一篇文档你就会用了

news2024/11/28 20:39:40

随着Vue3的到来,公司的新项目全部进行了升级,相比于Vue2,语法上个人觉得更简洁,更容易通俗易懂。首先安装vue3项目,这里我使用vite进行安装(强烈推荐,启动速度贼快)

npm create vite@latest

在这里插入图片描述
然后执行

cd vite-project
npm install
npm run dev

1.定义基本类型、引用类型数据,使用ref跟reactive

<template>
  <h1>{{ msg }}</h1>
  <h2>{{ data.msg }}</h2>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
const msg = ref('hello world')
const data = reactive({
  msg: 'hello vue3'
})
</script>
<style scoped></style>

在这里插入图片描述
1)修改ref跟reactive的值

<template>
  <h1>{{ msg }}</h1>
  <h2>{{ data.msg }}</h2>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
const msg = ref('hello world')
const data = reactive({
  msg: 'hello vue3'
})
// 修复ref 定义的变量,需要用.value的形式
msg.value = 'hello world1'
// 修改data的数据,则直接使用data.的语法即可
data.msg = 'hello vue3 and vite'
</script>
<style scoped></style>

备注:对于常量来说 ,我们也可以直接使用const/let 来定义,但是用const/let定义的,不能在点击事件或者http请求等方式下修改无效!!!

2.组件的引用

<template>
  <h1>{{ msg }}</h1>
  <h2>{{ data.msg }}</h2>
  <h3>{{ test }}</h3>
  <HelloWorld />
</template>
<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue';
import { ref, reactive } from 'vue'
const msg = ref('hello world')
const data = reactive({
  msg: 'hello vue3'
})
// 修复ref 定义的变量,需要用.value的形式
msg.value = 'hello world1'
// 修改data的数据,则直接使用data.的语法即可
data.msg = 'hello vue3 and vite'
let test = 'test'
</script>
<style scoped></style>

<template>
  <Child :msg="msg" />
</template>
<script setup lang="ts">
import Child from './components/child.vue'
import { ref } from 'vue'
const msg = ref('hello world')
</script>

子组件: child.vue

<template>
    <h1>{{ props.msg }}</h1>
</template>
<script setup lang="ts">
import { defineProps } from "vue";
const props = defineProps({
    msg: {
        type: String,
        default: ''
    }
})
</script>

2.使用v-model的形式

<template>
    <h1>{{ value }}</h1>
</template>
<script setup lang="ts">
import { defineProps, computed, defineEmits } from "vue";
const emits = defineEmits(['update:modelValue'])
const props = defineProps({
    modelValue: {
        type: String,
        default: ''
    }
})
const value  = computed({
    get: ()=> {
        return props.modelValue
    },
    set: (v:any)=> {
       emits('update:modelValue', v)
    }
})
</script>

对于子组件不改变父组件传过来的值,使用v-bind的形式更简洁

4.事件

<template>
  <h2 @click="handelClick">{{ msg }}</h2>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const msg = ref('点击事件')
const handelClick = ()=> {
  msg.value="我点击了"
}
</script>

5.生命周期

<template>
  <h2 @click="handelClick">{{ msg }}</h2>
</template>
<script setup lang="ts">
import { ref, onBeforeMount, onMounted, onUpdated, onUnmounted } from 'vue'
const msg = ref('点击事件')
const handelClick = ()=> {
  msg.value="我点击了"
}
// 挂载前
onBeforeMount(()=> {
  console.log('onBeforeMount')
})
// 挂载
onMounted(()=> {
  console.log('onMounted')
})
// 更新
onUpdated(()=> {
  console.log('onUpdated')
})
// 卸载
onUnmounted(()=> {
  console.log('onUnmounted')
})
</script>

5.computed语法

computed在vue3有2种写法
1)

<template>
  <h2>{{ value1 }}</h2>
</template>
<script setup lang="ts">
import { computed } from 'vue'
const value1 = computed(() => {
  return 'hello world'
})
})
</script>

这种情况下,跟vue2是一样的写法

2)

<template>
  <input v-model="value" />
</template>
<script setup lang="ts">
import { computed } from 'vue'
const value = computed({
  get: () => {
    return '123'
  },
  set: (v: any) => {
    return v
  }
})
</script>

这种写法,是建立在需要修改computed的定义的值,通常搭配input标签一起使用。

6.watch语法

vue3的watch 有3个参数,watch(WatcherSource, Callback, [WatchOptions])
参数:
WatcherSource:想要监听的响应式数据。
Callback:执行的回调函数,入参(newValue,oldValue)。
[WatchOptions]:deep、immediate、flush可选。
也有2种写法,如下:

<template>
  <h2 @click="handelClick">{{ count }}</h2>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue'
const count = ref(1)
const handelClick = () => {
  count.value = 2
}
watch(count, (newValue: any, oldValue: any) => {
  console.log('count:', newValue, oldValue)
}, { deep: true })

watch(()=>count, (newValue: any, oldValue: any) => {
  console.log('count:', newValue.value, oldValue.value)
}, { deep: true })

</script>

7.父组件调用子组件方法

child.vue

<template>
    <h1>{{ count }}</h1>
</template>
<script setup lang="ts">
import { ref, defineExpose } from "vue";
const count = ref(1)
const childClick = () => {
    count.value = 2
}
defineExpose({ childClick })
</script>

父组件

<template>
  <h1 @click="callChildMethods">调用子组件方法</h1>
  <child ref="childRef" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
import child from './components/child.vue'
const childRef = ref()
const callChildMethods = () => {
  childRef.value.childClick()
}
</script>

8.css只用js变量

<template>
  <h1 class="h1">调用子组件方法</h1>
  <child ref="childRef" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
const color = ref('#eee')
</script>
<style>
.h1 {
  color: v-bind(color);
}
</style>

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

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

相关文章

Android 12.0状态栏居中显示时间和修改时间显示样式

1.概述 在12.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了 效果图如下: 在这里插入图片描述 …

算法基础学习笔记——⑩DFS与BFS\树与图

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 DFS与BFS\树与图 ✨DFS ✨BFS &#x1f353;宽搜流程图如下&#xff1a; &#x1f353;宽搜流程&#xff1a; &#x1f353;广搜模板 ✨树与图 &#x1f353;树是特殊的图&#xff08;连通无环的图&am…

第09讲:SkyWalking Agent 启动流程剖析,领略微内核架构之美

微内核架构 SkyWalking Agent 采用了微内核架构&#xff08;Microkernel Architecture&#xff09;&#xff0c;那什么是微内核架构呢&#xff1f;微内核架构也被称为插件化架构&#xff08;Plug-in Architecture&#xff09;&#xff0c;是一种面向功能进行拆分的可扩展性架构…

英文论文(sci)解读复现【NO.8】基于注意机制和感受野的YOLOv5在唐卡图像缺陷识别中的应用

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

【Unity100个实用小技巧】世界Canvas自动隐藏,包含子物体

☀️博客主页&#xff1a;CSDN博客主页&#x1f4a8;本文由 萌萌的小木屋 原创&#xff0c;首发于 CSDN&#x1f4a2;&#x1f525;学习专栏推荐&#xff1a;面试汇总❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&#…

【JavaEE】JUC(java.util.concurrent)的常见类以及线程安全的集合类

目录 1、JUC&#xff08;java.util.concurrent&#xff09;的常见类 1.1、Callable接口的用法&#xff08;创建线程的一种写法&#xff09; 1.2、ReentrantLock可重入互斥锁 1.2.1、ReentrantLock和synchronized的区别 1.2.2、如何选择使用哪个锁 1.3、Semaphore信号量 1…

pta(浙大第四版)五道经典练习题③

目录 ①7-4 IP地址转换 ②、查找日期 ③藏头词 四、IP地址转换 五、删除链表值为偶数的节点 ①7-4 IP地址转换 题述&#xff1a;IP地址转换&#xff1a;一个IP地址是用四个字节&#xff08;每个字节8个位&#xff09;的二进制码组成。输入32位二进制字符串&#xff0c;输…

探索iOS转场动画

iOS提供图像转场动画&#xff0c;可实现酷炫的转场特效。动画包括&#xff1a;溶解、折叠、复印机、暴露、翻页、波纹、滑动等等。 一、溶解动画 CIDissolveTransition提供溶解动画&#xff0c;我们来看看对应的转场动画效果&#xff1a; 在CIFilter指定CIDissolveTransition…

Qt线程基础,多线程使用注意点,目前支持的线程种类。

Qt线程基础 一、什么是线程&#xff1f;二、GUI线程和工作线程三、同时访问数据四、使用线程1、何时使用线程的替代品2、应该用哪种Qt线程技术&#xff1f; 六、Qt中的多线程技术1、QThread:带有可选事件循环的低级API2、QThreadPool和QRunnable:重用线程 七、Qt Concurrent:使…

集成学习以及随机森林介绍

一、集成学习简介 1.什么是集成学习&#xff1f; 集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习方法&#xff0c;通过将多个弱学习器&#xff08;weak learner&#xff09;组合在一起来构建一个更强大的学习器&#xff08;strong learner&#xff09;。 …

C语言进阶——字符函数和字符串函数(下)

在前面我们已经学习了strlen、strcpy、strcat、strcmp几个库函数&#xff0c;今天我们继续学习剩余的库函数。 上期链接&#xff1a; C语言进阶——字符函数和字符串函数&#xff08;上&#xff09;_wangjiushun的博客-CSDN博客 目录&#xff1a; 3、长度受限制的字符串函数…

Redis(四)持久化策略

文章目录 持久化策略1、为什么Redis需要持久化2、Redis提供的两种持久化方式(1)RGB持久化详解概述RGB持久化的两种触发策略手动触发实例测试&#xff1a;自动触发实例测试&#xff1a; 查看rdb的状态信息info Persistence rdb模式的优缺点 (2)AOF持久化详解AOF持久化步骤&#…

近期复盘 | 想多了都是问题,想开了都是答案

文章目录 &#x1f339;四月坚持背单词&#xff0c;五月坚持利用AI写文章&#x1f60a;六月会坚持干什么&#x1f64c;23年7月&#xff1a;毕业两年&#xff0c;参保两年&#x1f440;强制存储&#xff0c;消费降级&#xff0c;开源节流&#x1f61c;好好深耕能力&#x1f381;…

JavaScript 进阶 (一)

目录 作用域 局部作用域 函数作用域 块作用域 全局作用域 作用域链 JS垃圾回收机制 闭包 变量提升 函数进阶 函数提升 函数参数 箭头函数 基本语法 箭头函数参数 箭头函数this 解构赋值 数组解构 对象解构 遍历数组 forEach 方法&#xff08;重点&#xff09; …

shell SNAT与DNAT

文章目录 SNATSNAT原理与应用SNAT实验 DNATDNAT原理与应用DNAT实验 SNAT SNAT原理与应用 SNAT 应用环境&#xff1a;局域网主机共享单个公网IP地址接入Internet&#xff08;私有不能早Internet中正常路由&#xff09; SNAT原理&#xff1a;修改数据包的源地址。 SNAT转换前提…

文心一言 VS 讯飞星火 VS chatgpt (23)-- 算法导论4.2 5题

五、V.Pan 发现一种方法&#xff0c;可以用 132 464 次乘法操作完成 68 x 68 的矩阵相乘&#xff0c;发现另一种方法&#xff0c;可以用 143 640 次乘法操作完成 70 x 70 的矩阵相乘&#xff0c;还发现一种方法&#xff0c;可以用155 424次乘法操作完成 72 x 72 的矩阵相乘。当…

数据安全治理科技产品能力-数据安全复合治理框架和模型解读(2)

数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,落地数据安全治理科技水平差异直接决定产品和项目是否可持续性,当前和未来更需要专业和有效创新。数据安全治理…

自动驾驶业内动态简讯

1. 引言 参与自动驾驶领域相关研发工作已有多年&#xff0c;针对该领域的快速发展&#xff0c;收集业内各大科技公司最新进展和技术突破&#xff0c;供伙伴们交流探讨。 闲话少说&#xff0c;直接开始吧! 2. 博世 据新闻介绍&#xff0c;博世在德国道路上测试L4级无人驾驶汽…

java 区分缺陷Defects/感染Infections/失败Failure

java 区分缺陷Defects/感染Infections/失败Failure 缺陷Defects 软件故障总是从代码中一个或多个缺陷的执行开始。 缺陷只是一段有缺陷、不正确的代码。 缺陷可能是程序语句的一部分或完整部分&#xff0c;也可能对应于不存在但应该存在的语句。 尽管程序员要对代码中的缺陷负…

基于SSM的甜品店商城系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会经济的发展和…