Vue3学习笔记(说人话版)

本文介绍了Vue3中如何使用reactive和ref创建响应式值,computed的计算属性应用,延时操作setTimeout,以及watch的监听功能。还讨论了父子组件间的通信、pinia在状态管理中的作用,计时器示例,以及响应式数据解构的storeToRefs技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过导入reactive方法或者ref方法造值

通过reactive方法只能造对象,例如我们用state去接这个reactive方法造的对象

那么我们就要把state看做一个对象,我们想获取里面的值就得state.count

用ref方法造值(string,number,array等等都可以)既可以直接写值又可以写对象

computed()的应用

computed方法是专门用来计算的。computed计算出来的值被称为计算属性,相当于一个常量一般不能被更改。

这是方法打印出来的数组

睡眠函数setTimeout()

然后这里有一个延时操作方法setTimeout(),看样子有点乱其实就是参数列表有两个参数,一个是逻辑语句然后跟个逗号后面就是延时时间。这个函数是异步的,程序会先往下执行

监听函数watch()

watch(监听数据,(新值,旧值)=>{

})

注意监听数据的值是可以不用加.value的,vue会默认读取

初始:

点击更改按钮:

也可以同时监听多个数据:

然后watch也可以加第三个参数immediate立即执行

如果监听一个对象数据会很麻烦,如果直接修改数组的嵌套属性,是不可以被直接监听到的,像这样:

这个时候我们要把deep参数打开,不过deep很耗能,所以不推荐打开:

但是如果我们知道需要监听具体某个对象里的数据使,可以这么做不用deep属性,这就是监听对象里具体某个数据变化的方法:

生命周期函数

vue3(组合式api)相较于vue2(选项式api)生命周期的变化

onMounted函数,直接导入直接用,可以多次使用,顺序按代码顺序执行。其他函数都一样使用

父子组件通信

父传子

父:

子:

const propos = defineProps({

    message:String

})

效果:

子传父

子:

const emit = defineEmits(['get-message'])

const sendToFather =()=>{

    emit('get-message','son to father message')

}

父:

defineEmits([])里面可以定义多个方法,它的参数列表就是定义方法的,

然后emit(方法名称,传送的信息)

然后父接:

模板引用

就是通过ref获取dom对象或者组件实例对象。

获取ref对象或者dom必须在挂在期后所以写在onMounted()里

既可以获得元素对象,又可以获得子组件对象

子组件对象里的元素需要在defineExpose里定义后才能被ref获取

跨组件通信(provide和inject)

想完成组件的最上级,需要在最上级组件用provide注释所需传输的数据,然后下级用inject接收,provid可以传死数据,响应式数据 还有方法等

上级:需要导入provide和inject方法

下级:inject

pinia的应用

我也不知道干啥玩意的,好像是管理vue的,把方法写在一个js里然后供组件调用。

安装pinia

首先是在vue里引入pinia,指令是

npm install pinia

大家可以去查阅具体的官方文档:安装 | Pinia 中文文档

然後在main.js里添加对pinia的使用:

计时器简单小案例

pinia具体是干啥的我开始也不太懂,作为小白后来我大概看了一下好像是取代vuex的一个东西,比如说这个计时器的例子,在js里去定义一个方法:

然后在组件里里去调用:

定义getter(充当计算属性的功能)

定义异步action

发送请求获得一个list

把list的数据渲染出来

响应式解构

数据解构需要storeToRefs

把需要的数据从pinia定义的方法里拿出来,并且保证实时刷新,不用再counterStore.count了

方法结构不需要storeToRefs

<think>嗯,用户现在想了解Vue3的基本概念,用简单易懂的语言解释。首先,我需要回顾一下用户之前的问题和对话历史。之前用户问过Cypher查询语言,现在转向了前端框架Vue3,可能是在学习全栈开发或者需要整合前后端技术。 用户提供的引用内容中提到了Vue的开发基于Node.js,使用Vue-cli、vue-router、vuex,以及UI框架如ElementUI和ICE。还有关于Vue3的响应式系统使用Proxy,与Vue2的差异。引用3中的内容涉及Vue实例、响应式数据、v-model、生命周期钩子等基础概念,但看起来是Vue2的示例,比如使用data函数和methods。需要注意用户可能混淆了Vue2和Vue3的语法,比如Vue3的Composition API与Vue2的Options API的区别。 用户的要求是“用简单易懂的语言解释Vue3的基本概念”,所以需要避免技术术语过多,用类比或日常例子来明。同时要区分Vue3的新特性,比如Composition API、Proxy响应式、性能优化等,并对比Vue2,但用户可能不需要深入细节,只要核心概念。 用户可能的需求是快速上手Vue3,或者理解其优势,所以需要强调易用性、性能、模块化等方面。要确保回答结构清晰,分点列出,可能包括响应式系统、组合式API、性能提升、更好的TypeScript支持等。 需要检查引用内容中的正确性,比如Vue3的响应式确实用Proxy替代了Object.defineProperty,而Vue2的响应式有局限性,比如无法检测数组变化或对象新增属性。同时,Vue3的setup函数和Composition API允许更好的代码组织,替代Vue2的Options API。 还要注意用户提到的引用3中的Vue实例创建方式,在Vue3中有所变化,比如使用createApp而不是new Vue()。需要指出这些差异,但保持解释简单。可能还需要提及生命周期钩子的变化,比如beforeCreate和created被setup取代,以及其他的钩子函数命名变化。 最后,生成的相关问题应该引导用户进一步学习,比如如何升级到Vue3Vue3Vue2的区别,或者具体功能的使用方法,如Composition API的例子。需要确保问题覆盖用户可能感兴趣的后续话题,帮助他们深入学习。</think>### Vue3 核心概念大白话 **Vue3 = 更聪明的数据管家 + 更灵活的代码组织方式** 举个栗子:你有个智能笔记本(Vue组件),数据变化会自动更新页面,就像管家发现冰箱缺牛奶会立刻在购物清单加一条,而你只需要告诉管家要监控哪些东西。 #### 一、核心能力 1. **智能数据监控(响应式系统)** - Vue2 用摄像头盯着数据(`Object.defineProperty`),监控能力有限(数组新增元素可能拍不到) - Vue3 换装雷达(`Proxy`)[^2] ```javascript // 定义一个会被雷达监控的冰箱 const fridge = Vue.reactive({ food: &#39;牛奶&#39; }) fridge.food = &#39;面包&#39; // 雷达立刻发现变化 → 更新购物清单 ``` 2. **模块化拼装(Composition API)** 以前按功能类型分类(像把螺丝刀、扳手分开放),现在按实际用途组合(修车工具箱、电工工具箱): ```javascript // 组合一个「用户管理工具包」 function useUser() { const user = Vue.ref(&#39;张三&#39;) const updateName = (name) => { user.value = name } return { user, updateName } } ``` 3. **性能三连击** - 打包体积⬇️:比 Vue2 小 40%(相当于旅行箱变背包) - 渲染速度⬆️:虚拟 DOM 算法优化(快递员规划最优路线送货) - 内存占用⬇️:Proxy 比 defineProperty 更省内存 #### 二、典型开发场景 1. **动态表单** 输入框绑定数据自动校验: ```vue <input v-model="username"> <!-- 双向绑定 --> <div v-if="username.length < 5">名字太短啦!</div> ``` 2. **组件通信** 父子组件传值像快递: ```vue <!-- 父组件发货 --> <Child :package="dataFromParent" @confirm="handleConfirm"/> <!-- 子组件签收 --> <script setup> defineProps([&#39;package&#39;]) // 收件 const emit = defineEmits([&#39;confirm&#39;]) // 发回执 </script> ``` 3. **状态管理** 全局共享数据(如用户登录信息)用 Pinia: ```javascript // store/user.js export const useUserStore = defineStore(&#39;user&#39;, { state: () => ({ name: &#39;游客&#39; }), actions: { login() { /* 登录逻辑 */ } } }) ``` #### 三、新手避坑指南 1. `reactive()` 适合对象/数组,基础类型用 `ref()` 2. 修改响应式数据要用 `.value`(`ref`包装的数据) 3. 模板中自动解包 `ref`,无需写 `.value` 4. 生命周期钩子改名:`beforeDestroy` → `beforeUnmount` --- ### 相关问题 1. Vue3 的 `setup` 语法糖具体怎么使用?[^2] 2. 如何在 Vue3 中实现类似 Vue2 的 `mixins` 功能? 3. Vue3 的 Teleport 组件有什么实际应用场景? 4. 为什么 Proxy 比 Object.defineProperty 更适合响应式系统?[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值