Vue3笔记

本文详细介绍了Vue3的新特性,包括Attrs与Props的区别、toRefs()的使用、Reactive ref和readonly()的功能,以及Watch、isRef()的介绍。此外,还探讨了动态img、Transition效果、组件v-model的实现、provide/inject的使用场景。同时,文章深入讲解了Vuex的目录结构和核心模块。最后,详细阐述了Setup语法糖,如组件引入、模块导出、定义名称、v-memo指令及其优化原理。
摘要由CSDN通过智能技术生成

1.Vue3

Attrs和 props

Attrs内可以包含所有父级传递的方法和string类型参数

Props只能是参数且需要在上面声明,一旦props声明了,arrts内就不会在现实此参数
1、props 要先声明才能取值,attrs 不用先声明
2、props 声明过的属性,attrs 里不会再出现
3、props 不包含事件,attrs 包含
4、props 支持 string 以外的类型,attrs 只有 string 类型

toRefs()

toRefs() 可以将 reactive() 创建出来的响应式对象转换成内容为 ref
响应式的值的普通对象

在搞清楚 toRefs() 的用法之前,我们需要先了解一下用 reactive() 和 ref()
创建出来的响应式对象的区别:

1、用 reactive()
创建的响应式对象,整个对象是响应式的,而对象里的每一项都是普通的值。当你把它用展开运算符展开后,整个对象的普通值都不是响应式的;

2、而用 ref() 创建的响应式的值,本身就是响应式的,并不依赖于其他对象。

所以当你需要展开 reactive() 创建的响应式对象,又不想让他们失去响应式特点的时候,就需要用 toRefs() 将它进行转换:

// 定义响应式数据对象
const state = reactive({
   
count: 0
})
// 定义简单的函数,使count每次+1
const add = () => {
   
state.count++
}
// 将setup函数的内容return出去,供外界使用
return {
   
// 将 state 展开导出,同时将其属性都转化为 ref 形式的响应式数据
...toRefs(state),
add
}

Reactive ref

reactive:reactive的作用是将对象包装成响应式对象------通过
Proxy代理后的对象。

ref:由传入值返回一个响应式的、可变的且只有value一个属性的ref对象。

readonly()

传入一个响应式对象、普通对象或 ref
,返回一个只读的对象代理。这个代理是深层次的,对象内部的数据也是只读的。

Watch

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

isRef()

isRef() 顾名思义,是用来判断某个值是否为 ref() 创建出来的响应式的值。

const unwrapper = isRef(foo) ? foo.value : foo

动态img

在这里插入图片描述

Transition

transition类名变更

  • v-enter→v-enter-from

  • v-leave →v-leave-from

<transition name="fade">
<div v-show="visible">这是一段文本</div>
</transition>

Style:
.fade-enter-active,
.fade-leave-active {
   
transition: all 2s ease;
}
.fade-enter-from,
.fade-leave-to {
   
opacity: 0;
}

组件v-model

父组件: // 在vue3中v-model默认叫modelValue,vue2中叫value

Vue3

VuYear(v-model="curYear" @yearChange="clickYear")

子组件:

el-select(v-model="currentYear" @change="(val)=>clickYear(val)")
props:{
   
        modelValue:{
   
            type:Number,
            default: 0
        }
    },
setup(props:any, context:any) {
   
        const clickYear = (val:any) => {
   
            context.emit('yearChange',val)
        }
        const currentYear = computed({
   
            set(value){
   
              context.emit('update:modelValue',value)  
            },
            get()</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Freedom风间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值