首頁 > web前端 > Vue.js > Vue3 setup的注意點及watch監控屬性的狀況有哪些

Vue3 setup的注意點及watch監控屬性的狀況有哪些

王林
發布: 2023-05-14 15:31:06
轉載
1080 人瀏覽過

一,setup須知

1.1setup的執行時間

1.setup的執行時間要比beforCreate執行要早

Vue3 setup的注意點及watch監控屬性的狀況有哪些

  export default {
    name: "Demo",
    beforeCreate(){
      console.log('beforeCreate已执行');
    },
    setup() {
      console.log('setup已执行');
      let person = reactive({
        name: "小明",
        age: 20,
      });
      return {
        person,
      };
    },
  };
登入後複製

1.2.steup參數

setup的參數
1.props: 值為對象,包含: 元件外部傳遞過來,且元件內部宣告接收了的屬性

2.context :上下文物件
①attrs:值為對象,包含: 元件外部傳遞過來,但沒有在props配置中聲明的屬性,相當於this.$attrs

  export default {
    name: "Demo",
    props:['msg','age'],
    setup(props) {
      console.log(props);
      let person = reactive({
        name: "小明",
        age: 20,
      });   
      return {
        person,
      };
    },
  };
登入後複製

Vue3 setup的注意點及watch監控屬性的狀況有哪些

#②slots: 收到的插槽內容,相當於this.$slots

在App定義插槽

<template v-slot:qwe>
<span>123</span>
</template>
<template v-slot:ewq>
<span>321</span>
</template>
登入後複製

在子元件中取得到插槽

 console.log(context.slots); // 得到插槽
登入後複製

Vue3 setup的注意點及watch監控屬性的狀況有哪些

③emit: 分發自訂事件的函數,相當於 this.$emit

在App中寫一個自訂事件並且傳給元件

<Demo @hi="Hello" msg="山鱼" age=10>
</Demo>
登入後複製
  setup() {
    function Hello(){
      console.log(&#39;你好!&#39;);
    }
    return {
      Hello
    }
  }
登入後複製

然後去到子元件使用context.comit取得到自訂事件

Vue3 setup的注意點及watch監控屬性的狀況有哪些

 function point(){
        context.emit(&#39;hi&#39;,666)
      }     
5TgxPT2v-1681788304084)]

```js
 function point(){
        context.emit(&#39;hi&#39;,666)
      }
登入後複製

與Vue2中的computed設定功能一致

import { reactive,computed} from "vue";
  export default {
    name: "Demo",
    setup() {
      let person = reactive({
        firstName: "小",
        lastName: "明",
      }); 
      // 计算属性的简写形式,不考虑修改,是只读的
      /*person.fullName= computed(()=>{
        return person.firstName+&#39;-&#39;+person.lastName
      }) */
      // 计算属性的完整形式(可以读改)
      person.fullName= computed({
        get(){
          return person.firstName +&#39;-&#39;+person.lastName
        },
        set(value){
          const arr = value.split(&#39;-&#39;)
          person.firstName = arr[0]
          person.lastName = arr[1]
        }
      })
      return {
        person,
      };
    },
  };
登入後複製

二,watch監視屬性

有兩種watch,分別是單一屬性資料監視,和多個屬性資料監視

watch中的三個參數分別為,監視的對象,監視的函數,監視屬性的配置

監視ref所定義的資料

①監視屬性監視ref的一個響應式的值

    watch(sum, (newvalue, oldvalue) => {
      console.log(&#39;当前值为&#39;+newvalue, &#39;以前值为&#39;+oldvalue);
    });
登入後複製

②監視ref所定義的多個響應式資料

        watch([sum,msg], (newvalue, oldvalue) => {
      console.log(&#39;当前值为&#39;+newvalue, &#39;以前值为&#39;+oldvalue);
    });
登入後複製

監視reactive所定義的資料

①監視reactive定義的資料的變化

使用reactive定義的資料無法使用watch正確的取得newValue
並且會強制開啟深度監視

             watch(person,(newValue, oldValue) => {
                console.log(&#39;person变化了&#39;,newValue,oldValue)
             })
登入後複製

②監視reactive所定義的響應式資料的某個屬性

            watch(()=>person.name,(newValue,oldValue)=>{
               console.log(&#39;person.name发生了变化&#39;,newValue,oldValue)
           })
登入後複製

③監視reactive所定義的響應式資料的某些屬性

watch([()=>{person.age},()=>{person.name}],(newValue,oldValue)=>{
                console.log(&#39;person.name发生了变化&#39;,newValue,oldValue)
            })
登入後複製

④特殊形況

註:該情況監視的是recative所定義的物件中的某個屬性,所以deep可以開啟

 watch(()=>person.job,(newValue,oldValue)=>{
                console.log(&#39;person.name发生了变化&#39;,newValue,oldValue)
            }, {deep: true})
登入後複製

以上是Vue3 setup的注意點及watch監控屬性的狀況有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板