![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/be2eac6029326f766bdc864e5fd73046.jpeg)
计算属性与监视
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">
import {defineComponent, reactive,computed,watch,ref,watchEffect} from 'vue'
export default defineComponent({
name:'App',
setup(){
const user = reactive({
firstName: '东方',
lastName: '不败'
})
const fullName1 = computed(()=>{
return user.firstName + '_' + user.lastName
})
const fullName2 = computed({
get(){
return user.firstName + '_' + user.lastName
},
set(val){
const names = val.split('_')
user.firstName = names[0]
user.lastName = names[1]
}
})
const fullName3 = ref('')
watch(user,({firstName,lastName}) => {
fullName3.value = firstName + '_' + lastName
},{immediate:true,deep:true})
watchEffect (() => {
const names = fullName3.value.split('_')
user.firstName = names [0]
user.lastName = names [1]
})
watch([() => user.firstName,() => user.lastName,fullName3],() => {
console.log('=====')
})
return {
user,
fullName1,
fullName2,
fullName3
}
}
})
</script>