首页 > 其他分享 >【后台管理系统】Vuex实现简单组件间通信

【后台管理系统】Vuex实现简单组件间通信

时间:2024-06-22 19:56:26浏览次数:14  
标签:Vuex isCollapse 间通信 state 组件 vuex store

Vuex是组件间通信的一种方式,可以实现任意组件间的通信。

官方文档:开始 | Vuex (vuejs.org)icon-default.png?t=N7T8https://vuex.vuejs.org/zh/guide/

Vuex应用的核心其实就是一个共享的仓库store,在store.state中储存你需要修改的状态,在mutation中储存修改状态的方法,再使用commit提交修改方法。如果需要进行异步操作即可以通过action中来分发mutations,如果只进行简单的不包含异步操作我们则可以直接commit。

本项目中我们简单的使用vuex实现点击header组件的按钮修改aside组件的状态(收起和展开侧边栏。

其实就是header组件与aside组件间通信,下面我们一步步用vuex实现:

第一步、引入vuex并创建store实例

npm或者yarn引入vuex,@后加版本号可以引入特定版本的vuex,我引入的是3.6.2,在控制台输入如下命令就行。

npm install [email protected]
yarn add vuex@next --save

在项目中创建store文件夹专门用于储存vuex相关代码,store/index.js中配置,为避免单一状态树冗长,在项目中将store分割成几个modules,在index.js中引入tab.js模块就行了

index.js

import Vue from "vue";
import Vuex from "vuex"
import tab from '@/store/tab'

Vue.use(Vuex)

export default new Vuex.Store({
	modules: {
		tab,
	}
})

tab.js

export default {
	state: {
		isCollapse: false,
	},
	mutations: {
		
		}
	}
}

如果依赖的状态少,直接在index.js配置如下:

import Vue from 'vue'
import Vuex from 'vuex'
 
Vue.use(Vuex)
 
export default new Vuex.Store({
//共享的需要修改的数据或状态
  state: {
    
  },
//对store中的数据进行加工
  getters: {
    
  },
//修改数据和状态的方法
  mutations: {
    
  },
//进行异步操作,在action中提交mutations
  actions: {
    
  },
//Vuex允许我们将 store 分割成模块(module)
//每个模块拥有自己的 state、mutation、action、getter
  modules: {
    
  },
})

在main.js中引入

import Vue from 'vue'
import App from './App.vue'
import store from '@/store/index'//引入

Vue.config.productionTip = false

new Vue({
	store,//
	render: h => h(App),
}).$mount('#app')
第二步、写入需要修改的状态与修改方法

侧边栏的展开与收起是通过 :collapse="isCollapse" 中 isCollapse 这一属性的ture和false来决定的,所以需要点击按钮需要修改的状态就是 isCollapse ,将其写在state中即可,而修改的方法就是点击按钮就将 isCollapse 进行取反就行,将修改方法CollapseMenu写入mutation中即可:

export default {
	state: {
		isCollapse: false,
	},
	mutations: {
		CollapseMenu(state) {
			state.isCollapse = !state.isCollapse
		}
	}
}
第三步、在header组件中定义点击事件

点击header组件中的button按钮就可以修改侧边栏状态,所以我们要在button上绑定点击事件:

 @click="hanleMenu"

在methods中定义handleMenu事件,因为我们在main.js中将store挂载,所以我们可以直接$store提交修改isCollapse的方法hanleMenu。

	methods: {
		hanleMenu() {
			this.$store.commit('CollapseMenu')
		}
	}
第四步、完善aside组件中逻辑

之前在aside组件中我们是直接将isCollapse属性写死成false:

:collapse="isCollapse"
isCollapse: false//需删除

但是现在需要通过tab中的isCollapse来动态获取其属性,所以我们要在computed中完善,之前写死的isCollapse属性也要删除:

	computed: {
			isCollapse () {
				return this.$store.state.tab.isCollapse
			},
		}

这样我们就使用Vuex简单的实现了组件间通信。Vuex还有其他核心概念与api等,这里只是简单的使用了一下Vuex,更多功能可以去官方文档中查阅~

标签:Vuex,isCollapse,间通信,state,组件,vuex,store
From: https://blog.csdn.net/m0_67238519/article/details/139871004

相关文章

  • Vue3的Composition API:Composition API是Vue3的一大新特性,它提供了一种更灵活的方式来
    1.介绍1.什么是CompositionAPI CompositionAPI是Vue.js3.0中引入的一项新特性,提供了一种新的、更灵活的方式来组织Vue组件的代码。CompositionAPI是基于函数的,并允许在组件的setup函数中直接处理响应式数据和生命周期钩子,使得代码更加清晰,更便于维护和测......
  • k8s集群搭建及对一些组件的简单理解(一)
    背景k8s的学习环境(用kubeadm方式搭建),我也搭过几次了,但都有点问题。要么在云服务器上弄,这个的问题是就只有一台轻量服务器,只能搭个单节点的;后来买了一台便宜的,所以就有了两台,但是不在一个zone,一个是广州,一个是成都,内网不通,感觉搭起来很麻烦,还没试过。要么是在本机的虚拟机上搞(vm......
  • 如何实现日历组件封装
    创建一个新的Vue组件,命名为CalendarPicker或者其他合适的名称。在组件中引入el-date-picker组件,并根据需求对其进行定制和封装。可以通过props接收传入的日期格式、日期范围等参数,以便灵活配置日历组件的显示方式。可以通过事件(event)向父组件传递用户选择的日期信息......
  • uniapp(全端兼容) - 最新详细实现刻度尺组件效果,uni-app实现尺子打分及手指拖动刻度尺
    效果图在uniapp微信小程序/手机h5网页网站/安卓app/苹果app/支付宝小程序/nvue等(全平台完美兼容)开发中,实现uniApp各端都兼容的“刻度尺(横格尺|尺子)”手势左右两侧拖动、手指滑动刻度尺功能,水平刻度尺,支持自定义尺子颜色、大小、刻度、滑动时的步进值、最大和最小刻度值......
  • 深入理解和实现Windows进程间通信(共享内存)
    常见的进程间通信方法常见的进程间通信方法有:管道(Pipe)消息队列共享内存信号量套接字下面,我们将详细介绍共享内存的原理以及具体实现。什么是共享内存?Windows共享内存(SharedMemoryinWindows)是一种操作系统机制,允许不同的进程(程序)共享一段内存空间。这意味着多个进......
  • uniapp中父组件调用子组件的方法
    1父组件<template>   <view>      <!--子组件-->      <recommen ref='xText'></recommen>    <view@click='onClick'>点击调用子组件方法</view>   </view></template><script>......
  • Vue非单文件组件
    非单文件组件......
  • 【React篇】父组件渲染时避免重复渲染子组件的3种处理方法
    在React中,父组件渲染时要避免重复渲染子组件,可以使用以下方法:使用React.memo(仅适用于函数式组件)或PureComponent(适用于类组件):这些方法可以帮助你创建在接收到新的props时仅在有必要的情况下重新渲染的组件。它们通过浅比较新旧props来判断是否需要重新渲染。对于......
  • 自定义组件获取接口数据
    <template><divclass="ting-title"><spanclass="text">{{text}}</span></div></template><script>exportdefault{name:'TingTitle',data:()=>{......
  • 鸿蒙UI开发快速入门 —— part07:组件状态管理之@Prop/@Link装饰器
    1、前言我们在上一章学习了@State装饰器,@State装饰器的作用范围仅仅在当前组件,接下来,我们讨论如何从父组件中传入参数到子组件,让子组件随着父组件的状态发生变化。本章将要介绍的就是:@Props装饰器。2、@Props装饰器@Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装......