gpt4 book ai didi

vue.js - watch 和 $watch 的区别

转载 作者:行者123 更新时间:2023-12-04 12:21:04 30 4
gpt4 key购买 nike

只是一个简单的问题。
选项和实例方法有什么区别?
基于 watch 示例,我们可以将 watcher 实现为一个选项( https://v3.vuejs.org/api/options-data.html#watch )和一个实例的方法( https://v3.vuejs.org/api/instance-methods.html#watch )。
从我的理解来看,我可以使用这两种方法实现完全相同的功能,唯一的区别是语法和实现位置。
如果我弄错了,有人可以根据示例向我解释这两者之间的区别吗?

最佳答案

您的假设确实(几乎)是正确的。this.$watch()的两大优势尽管。

  • 您可以开始动态观看
  • this.$watch() 的返回值是一个 unwatch 函数,您可以使用它在运行时动态停止观察器

  • 但这并不一定意味着您应该始终使用 this.$watch()watch: {} .相反。您应该始终考虑您的用例需要什么
    取消监视示例:
    export default {
    //..
    created(props) {
    const unwatchAge = this.$watch(() => this.user.age, (value, oldValue) => {
    if (value >= 18) {
    alert('You are now allowed to drive a car!');
    unwatchAge(); //we don't need age watching for anything else
    }
    });
    }
    //...

    }

    顺便说一句,使用 VUE3 您可能想查看 watch() / watchEffect() composition API方法。 watch()watch: {} 相同和 this.$watch()并且还有一个 unwatch-method 作为返回值。 watchEffect()检查参数(函数)中提到的任何值,并在内部放置一个观察者。 watch()示例(组成)
    import { toRef, watch} from 'vue';

    export default {
    //...
    setup(props) {
    const age = toRef(props.age);
    const unwatchAge = watch(age, console.log);
    // no () => age or () => age.value needed as age is a reference by using toRef and references can be handles like this

    setTimeout(() => {
    console.warn('unwatching age!');
    unwatchAge();
    }, 5000);
    }
    //...

    }
    watchEffect()示例(组成)
    import { toRef, watchEffect} from 'vue';

    export default {
    //...
    setup(props) {
    const age = toRef(props.age);

    watchEffect(() => {
    if (age.value >= 18) {
    alert('You are now allowed to drive a car!');
    }
    });
    //vue will internally recognize that age has to be watched here. No telling it manually.
    }
    //...

    }

    关于vue.js - watch 和 $watch 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69660082/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com