vue3计算属性与监视,watch与watchEffect

<template>
  <div class="about">
    <h2>计算属性与监事</h2>
    <fieldset>
      <legend>姓名操作</legend>
      姓氏:<input type="text" v-model="user.fisstName" placeholder="请输入姓氏" /><br>
      名字:<input type="text" v-model="user.lastName" placeholder="请输入名字" />
    </fieldset>
    <fieldset>
      <legend>计算属性和监视的演示</legend>
      姓名:<input type="text" v-model="fullname1" placeholder="显示姓名" /><br>
      姓名:<input type="text" v-model="fullname2" placeholder="显示姓名" /><br>
      姓名:<input type="text" v-model="fullname3" placeholder="显示姓名" />
    </fieldset>
  </div>
</template>
<script>
import { computed, reactive, ref, watch, watchEffect } from 'vue';
export default {
  name: 'About',
  components: {
   
  },
  setup () {
    const user=reactive({
      fisstName:"东方",
      lastName:"不败"
    })
    //通过计算属性的方式,实现第一姓名
    //vue3中的计算属性
    //计算属性函数中如果只传入一个回调函数,表示是get
    //返回的事ref
    const fullname1=computed(()=>{
        return user.fisstName+'-'+user.lastName
    })
    //第二个姓名
    const fullname2=computed({
      get(){
        return user.fisstName+'-'+user.lastName
      },
      set(val){
          console.log("=========",val)
          const names=val.split('-');
          user.fisstName=names[0];
          user.lastName=names[1];
      }
    })

    //监视
    //immediate:true 当前watch自动会执行一次
    //deep:true 深度监视
    const fullname3=ref('');
    watch(user,({fisstName,lastName})=>{
       fullname3.value=fisstName+'-'+lastName
    },{immediate:true,deep:true})

    // watch(()=>{
    //    fullname3.value=user.fisstName+'-'+user.lastName
    // },{immediate:true,deep:true})

    // watchEffect(()=>{
    //     fullname3.value=user.fisstName+'-'+user.lastName
    // })

    // 立即执行,没有惰性 immediate
    // 不需要传递你要侦听的内容,自动会感知代码依赖,不需要传递很多参数,只要传递一个回调函数
    // 不能获取之前数据的值
   watchEffect(()=>{
         const name=fullname3.value.split('-');
         user.fisstName=name[0];
         user.lastName=name[1];
    })

    //watch监视多个数据的
    //当我们使用watch监听非响应式的数据的时候,代码需要修改
    // watch([user.fisstName,user.lastName],()=>{
    //   console.log("=====")
    // })
    
    //用watch监视非响应式的数据的时候,需要回调的方式
    watch([()=>user.fisstName,()=>user.lastName],([curn,cure],[prn,pred])=>{
      console.log('watch', curn, prn, '---', cure, pred);
    })

    // watch([() => user.fisstName, () => user.lastName], ([curName, curEng], [prevName, preEng]) => {
    //     console.log('watch', curName, prevName, '---', curEng, preEng);
    //   },{ immediate: true })


    return {
      user,
      fullname1,
      fullname2,
      fullname3
    }
  },
  data(){
    return {
      username:"111111",
      list:[1,3,4,5,]
    }
  },
  methods:{
    gex(){
      console.log(this)
      this.list.push(10)
    }
  }
}
</script>

 

watch与watchEffect的区别以及使用

https://blog.csdn.net/qq_17355709/article/details/112723178

https://www.jb51.net/article/204827.htm

posted @ 2022-03-12 08:12  小小强学习网  阅读(192)  评论(0编辑  收藏  举报