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

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

王林
王林轉載
2023-05-14 15:31:061052瀏覽

一,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刪除