中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue3中Composition API怎么用

發布時間:2021-12-10 15:33:40 來源:億速云 閱讀:227 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Vue3中Composition API怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Vue3中Composition API怎么用”這篇文章吧。

什么是Composition API?

Composition API也叫組合式API,是Vue3.x中的新特性。通過創建Vue組件,我們可以將接口的可重復部分提取到可重用的代碼段中,沒有Composition API之前Vue相關業務的代碼需要配置到option的特定區域,如果在大型項目中這種方式會導致后期的維護性比較復雜,同時代碼可復用性不高,Vue3的Composition API就是解決這個問題的。

在setup中使用ref和reactive定義響應式數據

使用ref和reactive定義數據前,需要從vue中進行解構。

import {ref,reactive} from 'vue';

ref和reactive均可以定義響應式數據,定義的數據在Vue模板中可以直接獲取,但是如果通過方法獲取的話,ref和reactive定義的數據在獲取上有一定的差異,ref定義的需要通過value屬性間接獲取,reactive定義的數據可以直接獲取,在修改這兩類數據也是如此。

export default {
  setup() {
    // 使用ref定義響應式數據
    const title = ref("這是一個標題");
    // 使用reactive定義響應式數據
    const userinfo = reactive({
      username: "張三",
      age: 20
    });
    // 獲取reactive中的屬性可以直接獲取
    const getUserName = () => {
      alert(userinfo.username)
    };
    // 獲取ref中的數據需要通過value屬性
    const getTitle = () => {
      alert(title.value)
    };
    const setUserName = () => {
      // 修改reactive中的屬性可以直接修改
      userinfo.username = "修改后的張三"
    };
    const setTitle = () => {
      // 修改ref中的屬性,需要通過value
      title.value = "這是修改后的標題"
    };
    return {
      title,
      userinfo,
      getUserName,
      getTitle,
      setTitle,
      setUserName
    }
  },
  data() {
    return {
      msg: "這是Home組件的msg"
    }
  },
  methods: {
    run() {
      alert('這是Home組件的run方法')
    }
  }
}

可以使用v-model直接進行雙向數據綁定。

<input type="text" v-model="title">
<input type="text" v-model="userinfo.username">

toRefs解構響應式對象數據

之所以需要toRefs是因為通過toRefs解構的數據還具有響應式的特性,通過傳統的拓展運算符進行解構則不具備了響應式的特性,這就是為什么需要toRefs的原因。

從vue中解構出toRefs

import {ref,reactive,toRefs} from 'vue';

setup的返回數據中進行如下的修改

return {
  title,
  userinfo,
  getUserName,
  getTitle,
  setTitle,
  setUserName,
  ...toRefs(article)
}

setup中的計算屬性

setup中的計算屬性和一般的計算屬性類似,區別在于無法讀取到this。

setup() {
    let userinfo = reactive({
      firstName: "",
      lastName: ""
    });
    let fullName = computed(() => {
      return userinfo.firstName + " " + userinfo.lastName
    })
    return {
      ...toRefs(userinfo),
      fullName
    }
  }

readonly:深層的只讀代理

readonly存在的意義是能夠將響應式對象轉換為普通的原始對象。

引入readonly。

import {computed, reactive,toRefs,readonly} from 'vue'

給readonly傳入響應式對象。

let userinfo = reactive({
  firstName: "666",
  lastName: ""
});
userinfo = readonly(userinfo);

setup中的watchEffect

setup中的watchEffect具有以下幾個特點。

能夠監聽setup中的數據變化,數據一旦變化就會執行watchEffect中的回調函數。

及時setup中的數據沒有變化,初始的時候也會執行一次。

setup() {
    let data = reactive({
      num: 1
    });
    watchEffect(() => {
      console.log(`num2=${data.num}`);
    });
    setInterval(() => {
      data.num++;
    },1000)
    return {
      ...toRefs(data)
    }
  }

setup中的watch

使用watch監控數據的基本方法。

setup() {
    let keyword = ref("111");
    watch(keyword,(newData,oldData) => {
      console.log("newData是:",newData);
      console.log("oldData是:",oldData);
    })
    return {
      keyword
    }
  }

watch與watchEffect的區別

watch在首次頁面渲染的時候不會執行,但是watchEffect會。

watch能夠獲取到數據狀態變化前后的值。

setup中的生命周期鉤子函數

Vue3中Composition API怎么用

在setup中生命周期鉤子類似于直接調用一個函數。

  setup() {
    let keyword = ref("111");
    watch(keyword,(newData,oldData) => {
      console.log("newData是:",newData);
      console.log("oldData是:",oldData);
    })
    onMounted(() => {
      console.log('onMounted');
    })
    onUpdated(() => {
      console.log('onUpdated');
    })
    return {
      keyword
    }
  }

setup中的props

父組件進行傳值。

<Search :msg="msg" />

聲明接收

props: ['msg'],
  setup(props) {
    console.log(props);
  }

Provide與inject

有時,我們需要將數據從父組件傳遞到子組件,但是如果父組件到子組件是一個嵌套很深的關系,通過props進行傳遞將變得很麻煩,這種情況下,我們可以使用provide和inject來實現。

  • 一般用法

根組件通過provide傳遞數據。

export default {
  data() {
    return {
    }
  },
  components: {
    Home
  },
  provide() {
    return {
      title: "app組件里面的標題"
    }
  }
}

需要接收數據的組件通過inject聲明接收

export default {
  inject: ['title'],
  data() {
    return {
    }
  },
  components: {
  }
}

聲明接收后可以直接使用。

<template>
  <div class="container">
    這是Location組件
    {{title}}
  </div>
</template>
  • provide能夠獲取到this中的數據

export default {
  data() {
    return {
      title: "根組件的數據"
    }
  },
  components: {
    Home
  },
  provide() {
    return {
      title: this.title
    }
  }
}

注意:上面的一般用法中,如果父組件中的數據發生了變化,子組件的不會發生變化,因此推薦使用下面的composition API中的provide與inject能夠實現同步變化。

setup中的provide與inject

根組件

import Home from './components/Home.vue'
import {ref,provide} from 'vue'
export default {
  setup() {
    let title = ref('app根組件里面的title');
    let setTitle = () => {
      title.value = "改變后的title"
    }
    provide("title",title);
    return {
      title,
      setTitle
    }
  },
  data() {
    return {
    }
  },
  components: {
    Home
  }
}

用到數據的組件

import {inject} from 'vue'
export default {
  setup() {
    let title = inject('title');
    return {
      title
    }
  },
  data() {
    return {
    }
  },
  components: {
  }
}

與props不同的是,子組件中的數據如果使用了雙向數據綁定會同步到父組件。

以上是“Vue3中Composition API怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新巴尔虎左旗| 武城县| 湘潭县| 安多县| 平罗县| 花垣县| 日照市| 中宁县| 通榆县| 茂名市| 互助| 贵南县| 巫溪县| 依安县| 万源市| 陵川县| 沛县| 宁国市| 开平市| 佛山市| 揭阳市| 竹溪县| 胶州市| 崇仁县| 宁德市| 上杭县| 定州市| 关岭| 南雄市| 马鞍山市| 沾化县| 汾阳市| 保亭| 祁东县| 都安| 旺苍县| 抚远县| 和林格尔县| 南投市| 漳州市| 陆川县|