vue2er写vue3,竟然找了30分钟,不看文档的下场

65 阅读1分钟

vue3工作应用-watch写法

场景

女朋友在实现一个组件之间传参的功能,希望实现父组件传入参数,子组件能够根据参数实时变化。

按照我vue2的里面,告知:

  • props+watch监听props传入的属性。
  • v-model+watch实现
  • v-model+computed实现

核心就是监听变化的参数,根据其值进行逻辑。

然后表示无爱,watch一直不起效,发来代码:

<script setup>
const num = props.num
watch(num, n => {
    console.log(n)
})
</script>

好家伙,直接把响应性弄没了。

解决

官网watch讲解:cn.vuejs.org/api/reactiv…

vue3中,如果监听getter函数:

const obj = reactive({num: 0});
watch(() => obj.num, (v, oldV) => {})

如果监听ref:

const num = ref(0);
watch(num, (v, oldV) => {})

如果需要深度监听或者立即执行(放到了第三个参数中):

watch(num, (v, oldV) => {}, {
    deep: true,
    immediate: true
})

如果监听响应式对象,自动深层:

const obj = reactive({num: 0});
watch(obj, (v, oldV) => {})

如果监听多个:

watch([num1, num2], ([v1, oldV1], [v2, oldV2]) => {})