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 @   小小强学习网  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示