Vue3中的计算属性与监视

Vue3中的计算属性与监视

Vue3中的计算属性与监视

计算属性与监视

computed函数:

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

watch函数

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

watchEffect函数

  • 不用直接指定要监视的数据, 回调函数中使用的哪些响应式数据就监视哪些响应式数据
  • 默认初始时就会执行第一次, 从而可以收集需要监视的数据
  • 监视数据发生变化时回调
<template>
  <h2>计算属性和监视</h2>
  <fieldset>
    <legend>姓名操作</legend>
    姓氏:<input type="text" placeholder="请输入姓氏" v-model="user.firstName"/><br />
    名字:<input type="text" placeholder="请输入名字" v-model="user.lastName"/><br />
  </fieldset>
  <fieldset>
  <legend>计算属性和监视的演示</legend>
    姓名:<input type="text" placeholder="显示姓名" v-model="fullName1" /><br />
    姓名:<input type="text" placeholder="显示姓名" v-model="fullName2"/><br />
    姓名:<input type="text" placeholder="显示姓名" v-model="fullName3"/><br />
</fieldset>
</template>
<script lang="ts">

/*
计算属性与监视
1. computed函数: 
  与computed配置功能一致
  只有getter
  有getter和setter
2. watch函数
  与watch配置功能一致
  监视指定的一个或多个响应式数据, 一旦数据变化, 就自动执行监视回调
  默认初始时不执行回调, 但可以通过配置immediate为true, 来指定初始时立即执行第一次
  通过配置deep为true, 来指定深度监视
3. watchEffect函数
  不用直接指定要监视的数据, 回调函数中使用的哪些响应式数据就监视哪些响应式数据
  默认初始时就会执行第一次, 从而可以收集需要监视的数据
  监视数据发生变化时回调
*/
import {defineComponent, reactive,computed,watch,ref,watchEffect} from 'vue'
export default defineComponent({
  name:'App',
  setup(){
    // 定义一个响应式对象
    const user = reactive({
      // 姓氏
      firstName: '东方',
      // 名字
      lastName: '不败'
    })
    // 通过计算属性的方式 实现第一个姓名的显示


    // 第一个姓名    只有getter的计算属性
   const fullName1 = computed(()=>{
     return user.firstName + '_' + user.lastName
   })
  //  console.log(fullName1)
    // 第二个姓名   有getter与setter的计算属性
    const fullName2 = computed({
      get(){
        return user.firstName + '_' + user.lastName
      },
      set(val){
        // console.log('========',val)
        const names = val.split('_')
        user.firstName = names[0]
        user.lastName = names[1]
      }
    }) 
    // 第三个姓名
    const fullName3 = ref('')
     /* 
    watchEffect: 监视所有回调中使用的数据
    */
      /* 
    使用watch的2个特性:
      深度监视
      初始化立即执行
    */
    // 监视指定的数据
    watch(user,({firstName,lastName}) => {
      fullName3.value = firstName + '_' + lastName
    },{immediate:true,deep:true})
    // immediate默认会执行一次watch deep 深度监视

    // 监视  不需要配置immediate 本身默认就会进行监视(执行一次)
    // watchEffect(() => {
      // fullName3.value = user.firstName + '_' + user.lastName
    // })

    // 监视fullName的数据 改变firstName和lastName
    watchEffect (() => {
      const names = fullName3.value.split('_')
      user.firstName = names [0]
      user.lastName = names [1]
    })

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



    return {
      user,
      fullName1,
      fullName2,
      fullName3
    }
  }
})
</script>
上一篇:PointWise Tutorials


下一篇:如何使用快捷指令实现 iPhone 排水功能?