vue3 watchEffect
阅读数:135 评论数:0
跳转到新版页面分类
html/css/js
正文
一、概述
watchEffect和watch都是监听器,但在写法和使用上有所区别。
watch
- 显式指定依赖源,依赖源更新时执行回调函数watchEffect
- 自动收集依赖源,依赖源更新时重新执行自身
1、watch在监听ref和reactive类型时写法有所不同
import { watch } from 'vue'
// 监听
watch(
source, // 必传,要侦听的数据源
callback // 必传,侦听到变化后要执行的回调函数
// options // 可选,一些侦听选项
//{
// immediate: false,// 不立刻监听,即刚进来第一次不监听,第二次变化时才开始监听操作
//deep: true // 深度监听
//}
)
<script>
import {ref, watch} from 'vue'
export default {
setup() {
const state = ref(0)
watch(state, (newValue, oldValue) => {
console.log(`原值为${oldValue}`)
console.log(`新值为${newValue}`)
/* 1秒后打印结果:
原值为0
新值为1
*/
})
// 1秒后将state值+1
setTimeout(() => {
state.value ++
}, 1000)
}
}
</script>
<script>
import {reactive, watch} from 'vue'
export default {
setup() {
const state = reactive({count: 0})
watch(() => state.count, (newValue, oldValue) => {
console.log(`原值为${oldValue}`)
console.log(`新值为${newValue}`)
/* 1秒后打印结果:
原值为0
新值为1
*/
})
// 1秒后将state.count的值+1
setTimeout(() => {
state.count ++
}, 1000)
}
}
</script>
(3)监听多个数据源
watch(
[() => state.count, count],
([curCount, newVal], [preCount, oldVal]) => {
console.log("新值:", curCount, "老值:", preCount); console.log("新值:", newVal,
"老值:", oldVal); }
);
(1)不需要手动传入依赖
(2)每次初始化时会执行一次回调函数和自动获取依赖
(3)无法获取到原值,只能得到变化后的值。
二、watchEffect的使用
在组件初始化时, 会先执行一次来收集依赖,与watch的immediate类似。 然后当收集到的依赖中数据发生变化时, 就会再次执行回调函数。
watchEffect(() => {
console.log(`当${sum.person.age}的值变化的时候调用,初始化
的时候也调用一次
`)
})
清除副作用,就是在触发监听之前会调用一个函数可以处理你的逻辑
watchEffect(onInvalidate => {
console.log(`${sum.person.age} 的值变化了!`)
onInvalidate(() => {
console.log('清除函数执行了!')
})
},{
//'pre' 在组件更新前运行,默认为'pre'
//'post'在组件更新后运行,watchPostEffect
//'sync'强制效果始终同步触发。然而,这是低效的,应该很少需要。watchSyncEffect
flush:'post'
})
相关推荐
一、computed和watch应用场景
1、computed
computed拥有缓存属性,擅长的处理的场景是一个数据受多个数据影响。
2、watch
擅长处理的场景是一个数据影响多个数据,另外可以
1、安装依赖
npm install svg-sprite-loader --save-dev
2、配置build文件夹中的webpack.base.conf.js
3、在src/component
在列表渲染时使用key属性
当Vue.js用v-for正在更新已渲染过的元素列表时,它默认用“就地复用”策略,如果数据项的顺序被改变,Vue将不会移动D
一、vue.js devtools开发工具的使用
1、安装
在chrome或firefox浏览器的扩展插件仓库里搜索vue devtool。
2、debugger的使用
假设我们想调试App.vue这
ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素,如果用在子组件上,引用就指向组件实例。
<!-- `vm.$
在使用Vue中经常看到HTML中有标签属性前面添加了“:”,有些没有。
其实是v-bind的缩写。
v-bind
缩写: ‘:’
用法:动态绑定一个或多个特性,或一个组件prop到表达式。在绑定cl