vue3 新属性 watchEffect与effectScope

vue3 新增了很多比较好玩的属性,大家可以看一下

  • watchEffect
    vue3中watchEffect属性,立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。
<template>
  <el-select v-model="textData" class="m-2" placeholder="Select" size="large">
    <el-option
      v-for="item in list"
      :key="item.value"
      :label="item.label"
      :value="item.value"
    >
    </el-option>
  </el-select>
</template>
setup() {
    const options = [
      {
        value: "Option1",
        label: "Option1",
      },
      {
        value: "Option2",
        label: "Option2",
      },
    ];
    const data = reactive({
      textData: "",
      list: [] as TimeProp[],
    });
    const refData = toRefs(data);
    watchEffect(() => {
      data.list = options;
      console.log("调用啦");
      console.log(data.textData, "textData");
    });
    return {
      ...refData,
    };
})

运行一下可以看出,textData变化就会输出值,从而了解到watchEffect 不需要指定监听的属性,他会自动的收集依赖, 只要我们回调中引用到了 响应式的属性,那么当这些属性变更的时候,这个回调都会执行。
这样在一定的业务上很大程度方便了开发者,但是有些业务上不免造成不必要的麻烦,这个时候就要停止他的依赖。
官网上推荐停止监听,使用的是如下代码。

 const stop = watchEffect(() => {
      data.list = options;
      console.log("调用啦");
      console.log(data.textData, "textData");
    });
 stop();
  • effectScope
    但是我看到effectScope属性的时候,发现取消依赖也可以用这样的方法。
    创建一个 effect 作用域对象,以捕获在其内部创建的响应式 effect (例如计算属性或侦听器),使得这些 effect 可以一起被处理。
const scope = effectScope();
    scope.run(() => {
      watchEffect(() => {
        data.list = options;
        console.log("调用啦");
        console.log(data.textData, "textData");
      });
    });
    scope.stop();

这样,在run中定义的计算属性或侦听器(computed,watch, watchEffect等 ),在调用了scope对象的stop()方法之后,所有的依赖都被停止,只在初始化的时候调用一次。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值