vue3 計(jì)算屬性與監(jiān)聽

案例 總體代碼

<template>
  <!-- <h2>fullName1:{{fullName1}}</h2> -->
  <h2>計(jì)算屬性演示</h2>
  <fieldset>
    <legend>輸入姓名</legend>
    姓氏 <input type="text" v-model="user.firstName"><br>
    名字 <input type="text" v-model="user.lastName">
  </fieldset>
    <fieldset>
    <legend>計(jì)算屬性演示</legend>
    全名:<input type="text" v-model="fullName2">
  </fieldset>
</template>

<script lang="ts">
import {defineComponent,reactive,
  ref,
  computed,
  watch,
  watchEffect} from 'vue'
  export default defineComponent({
    setup(){
      const user = reactive({
        firstName:'',
        lastName:''
      })

      //vue3中的計(jì)算屬性
      //如果計(jì)算屬性的函數(shù)中如果只傳入一個(gè)回調(diào)函數(shù)缨硝,表示的是get
      const fullName1 = computed(()=>{
        //返回的是ref對象
        return user.firstName + user.lastName
      })


      const fullName2 = computed({
        get(){
          return user.firstName + user.lastName
        },
        set(value: string){
          console.log('當(dāng)前傳入的全名===',value)
          const value1 = value.substring(0,1)
          const value2 = value.substring(1)
          user.firstName = value1
          user.lastName = value2
        }
      })

      const fullName3 = ref('')
      //監(jiān)視---監(jiān)視指定的數(shù)據(jù)
      /*
        第一個(gè)值監(jiān)聽對象,第二個(gè)值監(jiān)聽的回調(diào)函數(shù),第三個(gè)值:watch屬性(immediate,deep)
      */
      // watch(user,({firstName,lastName})=>{
      //   fullName3.value = user.firstName + user.lastName
      //   console.log('fullName3改變了==',fullName3.value)
      // },{immediate:true,deep:true})


      //vue3新加入的監(jiān)聽
      //不需要配置屬性
      //第一次默認(rèn)監(jiān)聽,可以不寫immediate屬性
      watchEffect(()=>{
        fullName3.value = user.firstName + user.lastName
        console.log('fullName3改變了==',fullName3.value)

      })

      return{
        user,
        fullName1,
        fullName2,
        fullName3
      }
    }

  })
</script>

<style>

</style>

vue3中的計(jì)算屬性

如果計(jì)算屬性的函數(shù)中如果只傳入一個(gè)回調(diào)函數(shù),表示的是get

      const user = reactive({
        firstName:'',
        lastName:''
      })
      
    const fullName1 = computed(()=>{
        //返回的是ref對象
        return user.firstName + user.lastName
      })

computed 需要設(shè)置set方法時(shí)

      const fullName2 = computed({
        get(){
          return user.firstName + user.lastName
        },
        set(value: string){
          console.log('當(dāng)前傳入的全名===',value)
          const value1 = value.substring(0,1)
          const value2 = value.substring(1)
          user.firstName = value1
          user.lastName = value2
        }
      })

vue3中的watch及watchEffect

watch監(jiān)聽

//在setup函數(shù)中寫法與vue2不同
      const fullName3 = ref('')
      //監(jiān)視---監(jiān)視指定的數(shù)據(jù)
      /*
        第一個(gè)值監(jiān)聽對象嘱丢,第二個(gè)值監(jiān)聽的回調(diào)函數(shù),第三個(gè)值:watch屬性(immediate,deep)
      */
      watch(user,({firstName,lastName})=>{
        fullName3.value = user.firstName + user.lastName
        console.log('fullName3改變了==',fullName3.value)
      },{immediate:true,deep:true})
      
      
    //監(jiān)聽多個(gè)響應(yīng)式數(shù)據(jù)
    watch([user1,user2,user3,user4],({firstName,lastName})=>{
        fullName3.value = user.firstName + user.lastName
        console.log('fullName3改變了==',fullName3.value)
      },{immediate:true,deep:true})

watch監(jiān)聽非響應(yīng)式數(shù)據(jù)時(shí)

//監(jiān)聽非響應(yīng)式數(shù)據(jù)的時(shí)候使用回調(diào)函數(shù)形式
    watch([()=>user1,()=>user2,()=>user3,()=>user4],({firstName,lastName})=>{
        fullName3.value = user.firstName + user.lastName
        console.log('fullName3改變了==',fullName3.value)
      },{immediate:true,deep:true})

watchEffect監(jiān)聽

      //vue3新加入的監(jiān)聽
      //不需要配置屬性
      //第一次默認(rèn)監(jiān)聽祠饺,可以不寫immediate屬性
      watchEffect(()=>{
        fullName3.value = user.firstName + user.lastName
        console.log('fullName3改變了==',fullName3.value)

      })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末越驻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子道偷,更是在濱河造成了極大的恐慌缀旁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勺鸦,死亡現(xiàn)場離奇詭異并巍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)换途,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門懊渡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刽射,“玉大人,你說我怎么就攤上這事距贷”澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵忠蝗,是天一觀的道長现横。 經(jīng)常有香客問我,道長阁最,這世上最難降的妖魔是什么戒祠? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮速种,結(jié)果婚禮上姜盈,老公的妹妹穿的比我還像新娘。我一直安慰自己配阵,他們只是感情好馏颂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棋傍,像睡著了一般救拉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘫拣,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天亿絮,我揣著相機(jī)與錄音,去河邊找鬼麸拄。 笑死派昧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拢切。 我是一名探鬼主播蒂萎,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼失球!你這毒婦竟也來了岖是?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤实苞,失蹤者是張志新(化名)和其女友劉穎豺撑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黔牵,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聪轿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猾浦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陆错。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灯抛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出音瓷,到底是詐尸還是另有隱情对嚼,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布绳慎,位于F島的核電站纵竖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杏愤。R本人自食惡果不足惜靡砌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珊楼。 院中可真熱鬧通殃,春花似錦、人聲如沸厕宗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽已慢。三九已至骗炉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛇受,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工厕鹃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兢仰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓剂碴,卻偏偏與公主長得像把将,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子忆矛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容