vue watch 执行一次_学习vue3系列watch
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
watch 函数用来侦听特定的数据源,并在回调函数中执行副作用。默认情况是懒执行的,也就是说仅在侦听的源变更时才执行回调。
<template> <button @click="change">count is: {{ state.count }}button>template><script>import { reactive, watch } from 'vue'export default { setup () { let state = reactive({count: 0}) let change = () => state.count++; watch(state, () => { console.log(state, '改变') }) return { state, change } }}script>
注意上面的代码,第一个参数传入的 state 对象,第二个参数是回调函数,只要 state 中任意的属性发生改变都会执行回调函数,和 vue2 的区别是不要写 deep 属性,默认就是深度监听了。
现在是监听整个对象,当然我们也可以监听对象上的某个属性,注意下面代码的写法:第一个是回调函数,第二个参数也是回调函数。
<template> <button @click="change">count is: {{ state.count }}button>template><script>import { reactive, watch } from 'vue'export default { setup () { let state = reactive({count: 0}) let change = () => state.count++; watch(() => state.count, (oldVlaue, newValue) => { console.log(oldVlaue, newValue, '改变') }) return { state, change } }}script>
其实与 watch 类似的 API 还有一个就是:watchEffect,立即执行传入的一个函数,并响应式追踪其依赖,并在其依赖变更时重新运行该函数。
<template> <button @click="change">count is: {{ state.count }}button>template><script>import { reactive, watchEffect } from 'vue'export default { setup () { let state = reactive({count: 0}) let change = () => state.count++; watchEffect(() => { console.log(state.count, '改变') }) return { state, change } }}script>
注意它与watch的区别:
1、watch 是需要传入侦听的数据源,而 watchEffect 是自动收集数据源作为依赖。
2、watch 可以访问侦听状态变化前后的值,而 watchEffect 没有。
3、watch 是属性改变的时候执行,而 watchEffect 是默认会执行一次,然后属性改变也会执行。
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)