vue3笔记

vue3

  • 根标签可以是多个

  • script 脚本里没有this

  • 选项式和组合式

  • Setup里直接定义变量,也可以在模板中使用, 只是不是响应式的,无法实时刷新页面

  • ref既可以声明基本数据类型,又能声明对象数据类型 而reative只能声明对象数据类型

  • ref 声明的对象类型,底层还是用 reactive 实现的

  • reactive 定义的对象无法直接重新赋值,需要使用 Object.assign(obj,{a:1,b:2})
    而ref可以直接赋值新对象

Vue2
在给深层次的数据赋值或者给对象添加新的属性,页面上的数据并不会同步更新,
这是因为 Vue 2不能检测到对象属性的添加或者删除,所以vue不允许在已经定义好的数据上动态的添加新的属性值

解决方案: 使用 this.$set()

eg:   this.$set(item, 'checked', false)
  • watch 监听 ref 定义的对象,监听里面的某个属性,需要开启深度监听, 而 reactive 定义的对象默认开始深度监听,且不可关闭
  • 只想监听ref或reactive定义的对象中的某一个属性,需要写成函数返回一个值
watch(()=> person.name,(newValue,oldValue)=>{
    console.log('person.name变化了',newValue,oldValue)
}) 
  • defineExpose 子组件暴露属性或者方法,给父组件使用
  • 子组件先挂载完毕,父组件然后才挂载完毕
  • 路由传参 子组件解构参数后,参数失去响应式 ——————> 应该用 toRefs 包裹 路由配置表 设置 props: true,
    可以把路由params参数当成 props 传参

Pinia
批量修改:

countStore.$patch({
  sum:999,
  school:'atguigu'
})
  • storeToRefs 结构赋值 pinia里的数据
  • 通过 store 的 $subscribe() 方法侦听 state 及其变化
 talkStore.$subscribe((mutate,state)=>{
   
     console.log('LoveTalk',mutate,state)  
   localStorage.setItem('talk',JSON.stringify(talkList.value))
   
   }) 

组件通信

1.props

2.自定义事件 emit defineEmits(‘test’)

3.mitt 发布订阅 使用mitt插件

4.provide inject
provide提供一个值,所有的后代组件都可以注入inject

5.$attrs

v-bind=‘$attrs’

$attrs会自动排除props中声明的属性

6.$refs 和 $parent

7.Pinia

8.Slot

  • toRaw

    将响应式对象转换成原始对象,提交的时候可以用

  • Teleport 传送

    将指定元素传送挂载到某一元素上

        <div class="modal" v-show="isShow">
          <h2>我是一个弹窗</h2>
          <p>我是弹窗中的一些内容</p>
          <button @click="isShow = false">关闭弹窗</button>
        </div> </teleport> ```
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值