Vue组件 响应式监听方案


3.0提供的API setup()
加载和组件的生命周期有关(在组件挂载之前执行setupapi)

1.shallowRef

shallowRef 非递归式监听
动态监听数据(复杂数据)只监听里面的value变化(里面外面的都不)

<template>
  <div id="Body">
    我是内容区域
    <br />
    <v-messageBox></v-messageBox>
    <br />
    <h3>使用keep-alive标签实现动态绑定组件</h3>
    <div class="keep-box">
      <button @click="changeStatus(true)">第一个</button>
      <button @click="changeStatus(false)">第二个</button>
      <keep-alive>
        <component :is="data.componentId"></component>
      </keep-alive>
  </div>
</template>

<script>
import { shallowRef } from "vue";
export default {
  name: "Body",
  setup() {
    let data = shallowRef({
      componentId: KeepOne,
    });
    let changeStatus = (args) => {
      //shallowRef 方法  监听的是value属性的变化
      data.value = { componentId: args ? KeepOne : KeepTwo };
    };
    //要合并到当前组件 需要返回值(数据,方法,监听)
    return { data, changeStatus };
  },
};
</script>

2.ref

ref 构造简单数据监听的

<template>
  <div id="Body">
    <h3 @click="handle">{{msginfo}}</h3>
  </div>
</template>

<script>
//ref 构造简单数据监听
import { ref } from "vue";
export default {
  name: "Body",
  setup() {
    let msg={
        login:'没有账号?注册',
        load:'已有账号?登录',
    }
    let msginfo=ref(msg.login);
    let handle=()=>{
        if(msginfo.value==msg.login)
        {
            msginfo.value=msg.load;
        }
        else{
            msginfo.value=msg.login;
        }
    }
    return {msginfo,handle};
  },
};
</script>

3.reactive

递归式监听: 不像shallowRef 只监听value变化,更加方便

<template>
  <div id="Body">
    <div>
        <h3>{{list.a}}</h3>
        <h3>{{list.b.c}}</h3>
        <button @click="change">修改数据</button>
    </div>
  </div>
</template>

<script>
import {reactive} from "vue";
export default {
  name: "Body",
  setup() {
    let list=reactive({   //注意写法,复杂变量 {a:b,...}
        a:1,
        b:{
            c:2
        }
    })
    let change=()=>{
        list.a=3;
        list.b.c=4;
    }
    return {list,change };
  },
};
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

致可乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值