如何使用vuex實現兄弟組件通信

這篇文章主要給大家介紹了關於如何使用vuex實現兄弟組件通信的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨着小編來一起學習學習吧

前言

vuex主要是是做數據交互,父子組件傳值可以很容易辦到,但是兄弟組件間傳值,需要先將值傳給父組件,再傳給子組件,異常麻煩。

下面這篇文章就來給大家介紹下vuex兄弟組件通信的方法,下面話不多說了,來一起看看詳細的介紹吧

1. 核心想法

使用vuex進行兄弟組件通信的核心思路就是將vuex作爲一個store(vuex被設計的原因之一),將每個子組件的數據都存放進去,每個子組件都從vuex裏獲取數據,其實就是一句話——把vuex作爲一個橋

2. 具體代碼

父組件App.vue

<template>
 <div id="app">
 <ChildA/>
 <ChildB/>
 </div>
</template>

<script>
 import ChildA from './components/ChildA' // 導入A組件
 import ChildB from './components/ChildB' // 導入B組件

 export default {
 name: 'App',
 components: {ChildA, ChildB} // 註冊A、B組件
 }
</script>

<style>
 #app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
 }

 div {
 margin: 10px;
 }
</style>

子組件ChildA

<template>
 <div id="childA">
 <h1>我是A組件</h1>
 <button @click="transform">點我讓B組件接收到數據</button>
 <p>因爲你點了B,所以我的信息發生了變化:{{BMessage}}</p>
 </div>
</template>

<script>
 export default {
 data() {
 return {
 AMessage: 'Hello,B組件,我是A組件'
 }
 },
 computed: {
 BMessage() {
 // 這裏存儲從store裏獲取的B組件的數據
 return this.$store.state.BMsg
 }
 },
 methods: {
 transform() {
 // 觸發receiveAMsg,將A組件的數據存放到store裏去
 this.$store.commit('receiveAMsg', {
  AMsg: this.AMessage
 })
 }
 }
 }
</script>

<style>
 div#childA {
 border: 1px solid black;
 }
</style>

子組件ChildB

<template>
 <div id="childB">
 <h1>我是B組件</h1>
 <button @click="transform">點我讓A組件接收到數據</button>
 <p>因爲你點了A,所以我的信息發生了變化:{{AMessage}}</p>
 </div>
</template>

<script>
 export default {
 data() {
 return {
 BMessage: 'Hello,A組件,我是B組件'
 }
 },
 computed: {
 AMessage() {
 // 這裏存儲從store裏獲取的A組件的數據
 return this.$store.state.AMsg
 }
 },
 methods: {
 transform() {
 // 觸發receiveBMsg,將B組件的數據存放到store裏去
 this.$store.commit('receiveBMsg', {
  BMsg: this.BMessage
 })
 }
 }
 }
</script>

<style>
 div#childB {
 border: 1px solid green;
 }
</style>

vuex模塊store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
 // 初始化A和B組件的數據,等待獲取
 AMsg: '',
 BMsg: ''
}

const mutations = {
 receiveAMsg(state, payload) {
 // 將A組件的數據存放於state
 state.AMsg = payload.AMsg
 },
 receiveBMsg(state, payload) {
 // 將B組件的數據存放於state
 state.BMsg = payload.BMsg
 }
}

export default new Vuex.Store({
 state,
 mutations
})

我把所有的代碼+註釋都放在github了,源碼鏈接預覽鏈接 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對神馬文庫的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章