vue3基本语法小结

news/2025/2/20 21:07:46/

/* 
1. 如果不希望有其他的插件提示,可以禁用掉 例如 uni-app,小程序的插件
2. 希望有自动引进(官方有一些小bug,可能是required,那么就需要手动 import 引进)
    2.1 volar 自带
    2.2 Auto Import
*/

/* 
vue3基本语法小结
vue2 和 vue3 的区别(面试高频题目)
    1. 数据响应式原理重新实现 (ES6 proxy 替代了 ES5 的 Object.defineProperty)
    2. 提供了 composition api, 可以更好的逻辑复用与代码组织
    3. 源码用 typescript 重写, 有更好的类型推导 (类型检测更为严格, 更稳定)
    4. 虚拟 DOM - 新算法 (更快 更小)
    5. 模板可以有多个根元素

1. vite 的构建工具 - 与webpack的区别
vite使用的是原生的 esm 包,不需要编译,它是先起服务,需要用到模块再去加载,所以速度非常快
webpack:需要先把文件编译(es5的浏览器也能识别),编译完成后再起服务,速度较慢

2. 怎么创建vue3的项目
    0. node>=16
    1. npm create vite@latest
    2. npm i 

3. vue3插件介绍
    1. vscode - 安装 volar(兼容vue2,可以值使用volar,把 vuter、vuter 卸载)
    2. 谷歌浏览器 - Vue.js devtools(安装完重启浏览器即可),保证版本在 6.1以上即可(兼容vue2)

语法:
1. setup 生命周期钩子函数 - 实际工作中,请直接使用 setup 语法糖
    1. 组件中 compositionAPI 的起点,业务代码都放里面
    2. setup 会在 beforeCreate 钩子函数之前执行
    3. setup 中不能使用 this, this 指向 undefined
    4. 模版中需要使用的数据和函数,需要在 `setup` 返回
    需要在 script 加上  setup 的属性,开启语法糖
        1. export default 不用自己写
        2. setup() 不需要自己写
        3. return 的数据,不需要自己写

2. reactive - 把传入的 复杂类型的数据,转换成响应式
    把传入的对象,包裹一层 proxy 盒子返回,从而实现响应式
3. ref - 把传入的任意类型,转换成响应式对象,里面有唯一的属性 value 取值

4. computed 计算属性
    语法:computed( ()=>{ // 依赖数据改变时,会自动触发回调函数} )

5. watch 侦听器
    语法: watch(数据源,()=>{},{deep:true})

6. 生命周期
    创建前后没有,直接使用 setup 即可
    beforeMount --- onBeforeMount
    mounted --- onMounted
    beforeUpdate --- onBeforeUpdate
    updated --- onUpdated
    beforeDestory --- onBeforeUnmount
    destoryed --- onUnmounted

7. 父子通信
    父传子
        1. 父传子: <Son :money="money" :car="car"></Son>
        2. 子组件接受: defineProps(['属性名1','属性名2'...])
    子传父
        1. 子组件先定义好要触发的方法: const emit = defineEmits(['方法名1','方法名2'...])
        2. emit('方法名',payload)
        3. 父组件需要绑定好对应方法名 <Son @方法名="父组件的方法">

8. 依赖注入 - provide 和 inject
    作用:实现跨层级的数据(方法)传递
    注意:不能实现兄弟组件通信,所以一般工作中习惯用 pinia
    语法:和localSto非常相似
        1. 组件元素定义和提供
            const money = ref(10000)
            provide('属性名',money) //只需要传递money这个ref响应式对象即可
        2. 后代元素获取
            const money = inject('属性名') //拿到ref响应式对象

9. 模板中 ref 属性的使用
    作用:获取 dom 或者 子组件
    1. 定义一个响应式对象 const domRef = ref(null)
    2. 在模板中(template)通过ref属性绑定,<Son ref="domRef">
    3. 页面渲染完成,就能通过 domRef.value 拿到 dom 或者 子组件
    注意:如果要获取子组件上面的 属性/方法
    必须在子组件上面,自己暴露出去 ---  defineExpose({money,sayHi})
    父组件就能获取到子组件的属性和方法了
    domRef.value.money / domRef.value.sayHi()

10. vue3中废弃了 过滤器,使用函数替代即可
11. toRefs作用:使用 toRefs 可以保证该对象展开的每个属性都是响应式的
        const user = ref({ name: 'zs', age: 18 });
        const { name, age } = toRefs(user.value)

vue3 插件:
1. vue-router
实际工作中对应的版本:vue@3 + vue-router@4 + pinia(vuex5)
创建路由实例,不要背下来,需要用的时候,就复制!!!
1. 安装vue-router
2. 创建路由实例
3. main.js 引进路由实例,通过插件方式挂载到app上( createApp(App).use(router) )

2.vuex(可以用,但是工作中更倾向使用 pinia)

3.pinia:官方的全局状态管理
state 相当于组件中 data
getters 相当于组件中的 computed
actions 相当于组件中的 methods
 pinia 中没有 mutations,无论同步异步,都可以在 actions 完成

pinia创建步骤
1. main.js 通过 createPinia 创建了实例,通过插件挂载到 app
2. defineStore  定义pinia模块的数据,拿到返回的方法,导出去
    export const useTodosStore = defineStore('todos', { 模块的state,getters,actions})
3. 页面使用,值需要引进方法 useTodosStore 即可(一般都是用模块管理)

模块化
1. 每一个模块都划分到对应的文件里面,导出对应的方法,例如 store/modules/todos.js,store/modules/user.js
2. store/index.js 建立总主管,把所有的模块都统一引过来和导出去
    export * from './modules/counter'
    export * from './modules/user'
3. 页面使用,在 总主管 统一导入使用即可
    import { useCounterStore, useUserStore } from './store';
*/


http://www.ppmy.cn/news/49885.html

相关文章

【C++】二叉搜索树BST

目录 1.二叉搜索树的性质2.二叉搜索树功能的实现1.二叉搜索树的框架2.插入3.查找4.删除&#xff08;难点&#xff09;解析 3.二叉搜索树功能的递归实现1.查找递归实现2.插入递归实现递归形式中新建节点的链接问题 3.删除的递归实现 4.二叉搜索树部分默认成员函数实现1.构造函数…

【大数据之Hadoop】十七、MapReduce之数据清洗ETL

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程&#xff0c;目的是将分散、零乱、标准不统一的数据整合到一起&#xff0c;为决策提供分析依据。 ETL的设计分三部分&#xff1a;数据抽取、数据的清洗转换、数据的加载。 1 ETL体系结构 ETL主要是用来实现…

【wireshark】Ubuntu 安装 wireshark 以及 wireshark 过滤器的使用

目录 1、安装wireshark 2、wireshark 过滤器比较符号 3、wireshark 过滤方式 (1) 根据 IP 地址过滤 (2) 根据端口号过滤 (3) 根据报文长度过滤 (4) HTTP协议过滤 参考文章链接&#xff1a;Wireshark 过滤器使用 1、安装wireshark 在命令行输入如下命令安装 wireshark …

【安全与风险】互联网协议漏洞

互联网协议漏洞 互联网基础设施TCP协议栈因特网协议&#xff08;IP&#xff09;IP路由IP协议功能(概述)问题:没有src IP认证用户数据报协议&#xff08;UDP&#xff09;传输控制协议 (TCP)TCP报头TCP(三向)握手基本安全问题数据包嗅听TCP连接欺骗随机初始TCP SNs 路由的漏洞Arp…

【人工智能与深度学习】判别性循环稀疏自编码器和群体稀疏性

【人工智能与深度学习】判别性循环稀疏自编码器和群体稀疏性 判别类循环稀疏自编码器 (DrSAE)组稀疏组稀疏自编码器的问与答图像级别训练,无权重分享(weight sharing)的局域过滤器 (local filters)判别类循环稀疏自编码器 (DrSAE) DrSAE的设计结合了稀疏编码(稀疏自编码器)…

IJKPLAYER源码分析-主要队列

前言 对IJKPLAYER播放器内核几个关键的队列的理解&#xff0c;将有助于掌控全局。因此&#xff0c;这里简要介绍所涉及到的几个关键队列实现&#xff1a; PacketQueue&#xff1a;压缩数据队列&#xff0c;是一个带有首尾指针和回收单链表头指针的单链表结构&#xff0c;用来实…

解决vue pointerevent事件无法更改cursor问题 抓取图标(grab/grabbing)

vue pointerevent事件无法更改cursor问题 告诉你一个扎心的事情,CtrlF5就好了… 另外开F12调试工具且在双屏的副屏上也会出现这个bug… 故障重现 我想要实现一个抓取拖放的功能,鼠标按下修改指针为gragbbing状态,抬起恢复到grab 于是我大概和你一样,尝试在pointdown事件里写…

TypeScript(十二)模块

目录 引言 d.ts声明文件 declare关键字 全局声明 全局声明方式 全局声明一般用作 函数声明 在.ts中使用declare 外部模块&#xff08;文件模块&#xff09; 模块关键字module 声明模块 模块声明方式 模块通配符 模块导出 模块嵌套 模块的作用域 模块别名 内部…