vue watcheffect,

  vue watcheffect,

  本文主要介绍在Vue3中使用watchEffect的相关信息。watch和watchEffect都是显示器,只是写法和使用上有区别。本文有详细介绍,有需要的朋友可以参考一下。

  

前言

  大家应该对vue2中的watch api比较熟悉。vue2中的vue实例中有一个$watch方法,sfc(sigle文件组件)中有一个watch选项。当一个属性改变时,他可以实现我们想要的行为。例如:

  当ID改变时,从数据库获取新数据。

  当属性改变时执行动画。

  当搜索条件改变时,更新查询的数据。

  但是除了watch api,vue3还增加了一个watchEffect的api。我们来看看它的用法。

  我们收集一个userID的依赖,然后当userID发生变化时,我们会执行watchEffect的回调。

  //例子灵感来源于[文档](https://v3.vuejs.org/api/computed-watch-api.html # watch effect)

  从“vue”导入{ watchEffect,ref }

  setup () {

  const userID=ref(0)

  watch effect(()=console . log(userID))

  setTimeout(()={

  userID.value=1

  }, 1000)

  /*

  *日志

  * 0

  * 1

  */

  返回{

  使用者辩证码

  }

  }

  

与 watch 有什么不同?

  首先,我们可以从示例代码中看到,watchEffect不需要指定要监控的属性,它会自动收集依赖项。只要在我们的回调中引用了响应式属性,当这些属性发生变化时就会执行这个回调,而watcheffect只能监控指定的属性并做出改变(v3一开始可以同时指定多个属性)。

  第二点是watch可以得到新值和旧值(更新前的值),watchEffect不能。

  第三点是如果watchEffect存在,那么在组件初始化的时候会执行一次收集依赖关系(和computed一样),然后在收集到的依赖关系发生变化的时候会再次执行这个回调,但是watch并不需要,因为它从一开始就指定了依赖关系。

  从他们的不同,我们可以看到他们的优点和缺点。并且能够在面对业务需求时做出正确的选择。

  

watchEffect 进阶

  停止监听

  WatchEffect将返回一个函数来停止这种监视,如下所示:

  const stop=watchEffect(()={

  /* .*/

  })

  //稍后

  停止()

  该示例来自带有链接的官方文档。

  如果watchEffect是在setup或life cycle中注册的,那么当组件被卸载时,它会自动停止。

  使 side effect 无效

  什么是副作用?不可预测的接口请求是一个副作用。假设我们现在用一个用户ID来查询用户的详细信息,然后我们监控这个用户ID。当用户ID改变时,我们将发出请求。很简单,用手表就能做到。但是,如果我们的用户ID在请求数据的过程中多次改变,那么我们就会多次请求,最后一次返回的数据会覆盖我们之前返回的所有用户详细信息。这不仅会导致资源浪费,而且无法保证手表回调执行的顺序。我们可以用watchEffect来实现。

  onInvalidate()

  OnInvalidate(fn)当watchEffect重新运行或停止时,将执行传入的回调。

  watchEffect(()={

  //异步api调用返回操作对象

  const API call=someasync method(props . userid)

  onInvalidate(()={

  //取消异步api的调用。

  apiCall.cancel()

  })

  })

  借助于on invalid,我们可以对上述情况进行优雅的优化。

  

总结

  这篇关于在Vue3中使用watchEffect的文章就到这里了。更多关于Vue3 watchEffect使用的信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: