vue3 非父子組件通信詳解
業務場景是,不是父子組件實現通信
文件目錄
第一種方法
App.vue
<template> <div> <Home></Home> <button @click="addName">增加名字</button> </div> </template> <script> import Home from "./Home.vue"; import { computed } from "vue"; export default { name: "App", components: { Home, }, provide() { return { name: "張三", age: 23, length: computed(() => this.names.length), }; }, data() { return { names: ["張三", "李四", "王五"], }; }, methods: { addName() { this.names.push("fuck you"); console.log("hhhh"); }, }, }; </script> <style scoped> </style>
Home.vue
<template> <div> <div>我是home</div> <home-content></home-content> </div> </template> <script> import HomeContent from "./HomeContent.vue"; export default { name: "Home", components: { HomeContent, }, }; </script> <style scoped> </style>
HomeContent.vue
<template> <div>HomeContent:{{ name }}--{{ age }}---{{ length }}</div> </template> <script> export default { inject: ["name", "age", "length"], }; </script> <style lang="scss" scoped> </style>
vue3中使用Provide函數和Inject函數
事實上我們之前還學習過Provide和Inject,Composition API也可以替代之前的 Provide 和 Inject 的選項。
我們可以通過 provide來提供數據:
provide可以傳入兩個參數:
name
:提供的屬性名稱;
value
:提供的屬性值;
在 後代組件 中可以通過 inject 來註入需要的屬性和對應的值:
可以通過 inject 來註入需要的內容;
inject可以傳入兩個參數:
要 inject 的 property 的 name;
默認值;
數據的響應式
為瞭增加 provide 值和 inject 值之間的響應性,我們可以在 provide 值時使用 ref 和 reactive。
修改響應式Property
如果我們需要修改可響應的數據,那麼最好是在數據提供的位置來修改:我們可以將修改方法進行共享,在後代組件中進行調用;
註意
如果我們子組件應該是隻能使用,不能修改的狀態
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!