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

vue3-基础

一、创建vue3项目

npm init vue@latest

二、语法介绍

  1.< script setup>语法糖
<script setup>
const aa = '123'
const clickFn = () => {console.log(123);
}
</script>
<template><div>{{ aa }}</div><button @click="clickFn">aa</button>
</template>
  2.响应式函数
    2.1reactive()
       2.1.1介绍
接收一个对象类型数据的参数传入并返回一个响应式的对象
      2.1.2使用
<script setup>import { reactive } from 'vue'const rea = reactive({ aa: 123, bb: '22' })const clickFn = () => {console.log(123);rea.aa += 1}
</script>
<template><div>{{ rea.aa }}</div><button @click="clickFn">aa</button>
</template>
    2.2 ref()
      2.2.1介绍
接收简单类型或者对象类型的数据传入并返回一个响应式对象
      2.2.1使用
<script setup>import { ref } from 'vue'const re = ref(0)
</script>
<template><div>{{ re }}</div>
</template>
    2.3比较ref和reactive
1.reactive不能处理简单类型的数据
2.ref参数类型支持更好但是必须通过.value访问修改
3.ref函数的内部实现依赖于reactive函数
​
推荐使用ref函数,更加灵活
  3.computed计算属性
      3.1使用
<script setup>import { ref, computed } from 'vue'const aa = ref([1, 2, 3, 4, 5, 6, 7, 8, 9])const com = computed(() => {return aa.value.filter(item => item > 2)})setTimeout(() => {aa.value.push(9, 10)}, 3000)
</script>
<template><div>原值 -{{ aa }}计算属性-{{ com }}</div>
</template>
        3.2注意
1.计算属性不能直接修改dom或异步请求
2.计算属性应该是只读的
    4.watch函数
      4.1介绍
介绍
watch是用来监听一个或多个数据变化的。数据变化时执行回调函数
​
定义
watch(值, (newv, oldv) => {console.log(newv, oldv, 1);
},{immediate:true,deep:true
})参数属性
immediate  立即执行
deep       深度监听
    4.2监听单个数据
<script setup>import { ref, watch } from 'vue'const aa = ref(0)const clickFn = () => {aa.value += 1}watch(aa, (newv, oldv) => {console.log(newv, oldv, 1);})
</script>
<template><div><button @click="clickFn">aa</button></div>
</template>
    4.3.监听多个数据的变化
<script>import { ref, watch } from 'vue'const aa = ref(0)const bb = ref('qa')const clickFn = () => {aa.value += 1}const clickFn1 = () => {bb.value += 1}watch([aa, bb], (newv, oldv) => {//只要有其中一个数据变化就会触发 console.log(newv, oldv, 1);}, {immediate: true})
</script>
<template><div><button @click="clickFn">aa</button><button @click="clickFn1">bb</button></div>
</template>
    4.4 立即执行监听
<script setup>import { ref, watch } from 'vue'const aa = ref(0)const clickFn = () => {aa.value += 1}watch(aa, (newv, oldv) => {console.log(newv, oldv, 1);})
</script>
<template><div><button @click="clickFn">aa</button></div>
</template>
    4.5 深度监听
<script setup>import { ref, watch } from 'vue'const aa = ref({ aa: 123 })const clickFn = () => {aa.value.aa += 1}watch(aa, (newv, oldv) => {console.log(newv, oldv, 1);}, {deep: true})
</script>
<template><div>{{ aa.aa }}<button @click="clickFn">aa</button></div>
</template>
    4.6 监听对象中的某个值
<script setup>import { ref, watch } from 'vue'const aa = ref({ aa: 123, bb: 235 })const clickFn = () => {aa.value.aa += 1}const clickFn1 = () => {aa.value.bb += 1}watch(() => aa.value.aa, (newv, oldv) => {console.log(newv, oldv, 1);}, {deep: true})
</script>
<template><div>{{ aa.aa }}<button @click="clickFn">aa</button><button @click="clickFn1">aa1</button></div>
</template>
  5.生命周期函数
    5.1介绍
介绍
1、setup() : 开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method
2、onBeforeMount() : 组件挂载到节点上之前执行的函数;
3、onMounted() : 组件挂载完成后执行的函数;
4、onBeforeUpdate(): 组件更新之前执行的函数;
5、onUpdated(): 组件更新完成之后执行的函数;
6、onBeforeUnmount(): 组件卸载之前执行的函数;
7、onUnmounted(): 组件卸载完成后执行的函数;
8、onActivated(): 被包含在 <keep-alive> 中的组件,会多出两个生命周期钩子函数,被激活时执行;
9、onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行;
10、onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数。
​
注意
生命周期函数可以执行多次,多次执行时传入的回调会在时机成熟时依次执行
    5.2使用
<script setup>import { onMounted } from 'vue'// 组件挂载onMounted(() => {console.log('组件挂载');})
</script>
  6.传参方法 
    6.1.父子通信
      6.1.1父传子
//在父组件中
<script setup>import children from './components/children.vue'import { ref } from 'vue'const data = ref('ccc')
</script>
<template><div><children :data="data"></children></div>
</template>//在子组件中
<script setup>const props = defineProps({data: String})
</script>
<template><div>{{ data }}</div>
</template>
      6.1.2子传父
//在子组件中
<script setup>//通过defineEmits生成emit方法 数组中可以创建多个值const emit = defineEmits(['child'])const send = () => {emit('child', 123)}
</script>
<template><button @click="send">aaa</button>
</template>
​
//在父组件中
<script setup>import children from './components/children.vue'const child = (data) => {console.log(data);}
</script>
<template><div><children @child="child"></children></div>
</template>
    6.2获取dom实例或组件对象
      6.2.1使用
<script setup>//导入子组件import child from './components/children.vue'import { onMounted, ref } from 'vue'// 使用ref创建refs对象const aa = ref(null)const bb = ref(null)// 组件挂载完成之后获取对象onMounted(() => {console.log(aa.value);console.log(bb.value);})
</script>
<template><!-- 通过ref标识绑定ref对象 --><div ref="aa">123</div><!-- 通过ref标识绑定组件 --><child ref="bb"></child>
</template>
      6.2.2defineExpose()
    介绍
默认情况下在<script setup>语法糖下组件内部的属性和方法是不开发给父组件访问的,
可以通过defineExpose()编译宏指定那些属性和方法允许访问
    使用
//在子组件
<script setup>import { ref } from "vue"const aa = ref(0)//透露给父组件的值defineExpose({aa})
</script>
<template><div>{{ aa }}</div>
</template>
​
//在父组件
<script setup>import child from './components/children.vue'import { onMounted, ref } from 'vue'const bb = ref(null)// 组件挂载完成之后获取对象onMounted(() => {console.log(bb.value.aa);})
</script>
<template><!-- 通过ref标识绑定组件 --><child ref="bb"></child>
</template>
​
    6.3.provide和inject
      6.3.1介绍
在顶层组件通过provide传数据
在底层组件通过inject接收数据
      6.3.2使用
组件嵌套关系 父组件-> children.vue -> 底层组件//在父组件
<script setup>import child from './components/children.vue'//传值provide('value123', '顶层数据')//传响应式数据const aa = ref(0)provide('value234', aa)//传方法const setAA = () => {aa.value += 1}provide('value345', setAA)
</script>
<template><!-- 通过ref标识绑定组件 --><child ref="bb"></child>
</template>
​
//在底层组件
<script setup>import { inject } from "vue";const bb = inject('value123')const aa = inject('value234')const setAA = inject('value345')
</script>
<template><div>{{ bb }}</div><div>{{ aa }}</div><button @click="setAA">aa</button>
</template>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零开始学cv-5: 图像的仿射变换
  • FlinkCEP - Flink的复杂事件处理详解
  • 推荐使用阿贝云免费云服务器、免费虚拟主机
  • docker GBase 8sV8.8使用的常见错误
  • pip出问题了,重装,获取python3.7 get-pip.py
  • python(7) : Windows守护python程序
  • 《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 07数据中心的边缘
  • 医学装备(即设备全生命周期)管理系统背景及必要性
  • 如何选择需求跟踪管理软件?8款优质推荐
  • 一款功能强大的本地数据全文搜索引擎Anytxt Searcher
  • 基于ssm+vue+uniapp的医院挂号预约系统小程序
  • 爬虫笔记21——DrissionPage自动化框架的使用
  • 30秒内批量删除git本地分支
  • 干货| Python日常高频写法总结
  • 【图文教程】Hexo+GitHubPages搭建个人博客
  • [译]Python中的类属性与实例属性的区别
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017 年终总结 —— 在路上
  • 30秒的PHP代码片段(1)数组 - Array
  • 4个实用的微服务测试策略
  • Angular 4.x 动态创建组件
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Java,console输出实时的转向GUI textbox
  • Java到底能干嘛?
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • 给github项目添加CI badge
  • 给新手的新浪微博 SDK 集成教程【一】
  • 构建工具 - 收藏集 - 掘金
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 思否第一天
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我建了一个叫Hello World的项目
  • 由插件封装引出的一丢丢思考
  • 原生js练习题---第五课
  • 容器镜像
  • 移动端高清、多屏适配方案
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​插件化DPI在商用WIFI中的价值
  • #### go map 底层结构 ####
  • #define 用法
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $refs 、$nextTic、动态组件、name的使用
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计高校学生选课系统
  • (一)SvelteKit教程:hello world
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 药厂业务系统 CPU爆高分析
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET使用存储过程实现对数据库的增删改查