vue3的小使用技巧

vue3的小使用技巧

最重要的一般我们定义数据的时候要末使用ref, 要末使用reactive,直接定义的只有方法,因为数据需要实时渲染,定义方法常用const ,数据用let 防止报错
Uncaught TypeError: Assignment to constant variable. 报错原因就是因为const 定义数据是定量后期不能修改 ,这个错犯的频率有点高就记录一下

1.1传送门teleport
<div>
    <button @click="modelOpen = true">弹出框</button>
    <teleport to="body"> 
      <div v-if="modelOpen">
        <div>我是弹出的1</div>
        <button @click="modelOpen =false">关闭</button>
      </div>
    </teleport>
  </div>

to 挂载在哪里放在盒子的内部最后面

1.2数据监听watch

数据监听这里可以监听多个
第一个参数是监听的属性值 第二个是个回调函数,里面参数分别是新值旧值

如果是监听reactive中的数据第一个参数必须要以回调的形式,并且返回值不能加括号,写法很重要,不然无效

 watch(type,(newValue, old) => { //用来监听ref中的数据
       console.log(1111,newValue,old)
 });
  watch(()=>type,(newValue, old) => { //监听reactive中的数据 ,回调形式注意这里的type不要加大括号不然监听不到
       console.log(1111,newValue,old)
 });
   watch([()=>type,()=>type2],(newValue, old) => { //监听多个数据,以数组的形式就行,返回的新旧值也是以数组的形式返回
       console.log(newValue,old)
 });

下面这种是监听整个reactive中的数据,这个时候新值旧值是一样的

   watch(data,(newValue, old) => { 
       newValue=old
 });

在这里插入图片描述
这是深度监听就不过多讲解了
也可以直接监听data.a.time 效果是一样的
下面是监听data.a

在这里插入图片描述

在这里插入图片描述
watchEffect监听

首先他跟watch的区别 watch需要你去指定监听哪个属性
watchEffect则是自动监听所有的属性,并且会自动执行

当内部的监听的属性发生改变就会自动执行,如果内部没有写的数据发生了改变,他不会自动执行的
.

2.1provide,inject 定义变量全局使用

provide跟react 中的提供者相似 用来提供数据,一般用在入口文件
inject就类似于消费者,用来取用数据,哪里用哪里引用,这里举个例子eleplus的全局消息提示框
也可以进行不同组件的数据传递
首先在main.js中定义文件
provide provide(‘注入的属性名’,‘注入的属性值’)可以使用ref(‘注入的属性值’)这样可以动态绑定渲染
inject inject(‘接收的属性名跟注入的一致’)

import {ElMessage} from 'element-plus' //引入提示框
app.use(ElementPlus)//如果没有在全局引用的话就需要在原型上面添加
//app.config.globalProperties.$message = ElMessage;
app.provide('$message', ElMessage) //定义好数据接下来就是在需要用的文件中引入就行
import {inject,onBeforeMount} from 'vue'
 onBeforeMount(() => {
     	inject($message).success('注册成功')   //直接写在生命周期中有效
    });
//下面是没有定义写在非生命周期的方法中,
//注意此时引入inject一定还要在下面定义不然就回报错
 const btnClick=()=>{
	inject($message).success('注册成功') //这里会报错看下图
}
//定义之后的代码,不会报错
const $message=inject("$message")
onBeforeMount(() => {
     	$message.success('注册成功') 
 });
const btnClick=()=>{
	$message.success('注册成功')
}

在这里插入图片描述
大致意思就是Inject()只能在setup()或功能组件中使用。我的推断是在方法中需要定义的,在vue的生命周期中可以直接用,没有过多的解释,有深入了解的童鞋可以指正,因此我们一般最好是在前面定义一下,不管生命周期中能不能用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小菜鸟学代码··

给打赏的我会单独一对一讲解

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

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

打赏作者

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

抵扣说明:

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

余额充值