vue3中计算属性与监视

Posted 嘴巴嘟嘟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue3中计算属性与监视相关的知识,希望对你有一定的参考价值。

computed 函数:

  • 与 computed 配置功能一致
  • 只有 getter
  • 有 getter 和 setter

watch 函数

  • 与 watch 配置功能一致
  • 监视指定的一个或多个响应式数据, 一旦数据变化, 就自动执行监视回调 默认初始时不执行回调, 但可以通过配置 immediate 为 true, 来指定初始时立即执行第一次
  • 通过配置 deep 为 true, 来指定深度监视

watchEffect 函数

  • 不用直接指定要监视的数据, 回调函数中使用的哪些响应式数据就监视哪些响应式数据
  • 默认初始时就会执行第一次, 从而可以收集需要监视的数据
  • 监视数据发生变化时回调
	fistName:
    <input v-model="user.firstName" />
    <br />
    lastName:
    <input v-model="user.lastName" />
    <br />
    fullName1:
    <input v-model="fullName1" />
    <br />
    fullName2:
    <input v-model="fullName2" />
    <br />
    fullName3:
    <input v-model="fullName3" />
    <br />

	import {
	  defineComponent,
	  computed,
	  watch,
	  watchEffect,
	  reactive,
	  ref,
	} from "vue";
	setu(){
		const user = reactive({
      firstName: "A",
      lastName: "B",
    });

    //  使用计算属性
    const fullName1 = computed(() => {
      return user.firstName + "-" + user.lastName;
    });
    const fullName2 = computed({
      set(value) {
        console.log("fullName2 set");
        const names = value.split("-");
        user.firstName = names[0];
        user.lastName = names[1];
      },
      get() {
        console.log("fullName2 get");
        return user.firstName + "-" + user.lastName;
      },
    });
    // 监听
    const fullName3 = ref("");
    // 通过改变user,来监听其他数据
    watch(
      user,
      () => {
        fullName3.value = user.firstName + user.lastName;
      },
      {
        immediate: true, // 是否初始化立即执行一次, 默认是false
        deep: true, // 是否是深度监视, 默认是false
      }
    );


	/*
      watchEffect: 监视所有回调中使用的数据
    */
    /*
    watchEffect(() => {
      console.log('watchEffect')
      fullName3.value = user.firstName + '-' + user.lastName
    })
    */

    // 通过监听fullName3 改变 其他的数据
    // watch(fullName3, (value) => {
    //   console.log(value);
    //   const names = value.split("-");
    //   user.firstName = names[0];
    //   user.lastName = names[1];
    // });

    /*
    watch多个数据:
      使用数组来指定
      如果是ref对象, 直接指定
      如果是reactive对象中的属性,  必须通过函数来指定
    */
    watch([() => user.firstName, () => user.lastName, fullName3], (values) => {
      console.log("监视多个数据", values);
    });

    return { btn, user, fullName1, fullName2, fullName3 };
	}

以上是关于vue3中计算属性与监视的主要内容,如果未能解决你的问题,请参考以下文章

VUE3 之 计算属性与侦听器

VueVue全家桶Vue3

Vue2 和 Vue3 中的 watch 用法

VueVue全家桶Vue3

Vue3官网-高级指南(十七)响应式计算`computed`和侦听`watchEffect`(onTrackonTriggeronInvalidate副作用的刷新时机`watch` pre)(代码片段

Vue基础(中):数据代理事件处理计算和监视属性class与style绑定