1.概念

​ 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

2.何时使用?

​多个组件依赖于同一状态

来自不同组件的行为需要变更同一状态

3.vuex工作原理

如组件Count进行+2操作,通过store.dispatch('jia',2)分发给actions

Actions:对象 key是动作类型 value是个函数,在此函数内调用store.commit提交给Mutations

Mutations:对象,里面是function进行加2操作 后State内对对应的sum自动改变

Mutations里面不要写任何业务逻辑和ajax请求。

随后vuex可以重新解析组件,渲染页面

4.搭建vuex环境

1. 创建文件:src/store/index.js

npm i vuex

注:2022年2月7日,vue3成为默认版本,vuex也更新到了4版本。现在执行npm i vuex 安装的是vuex4,vuex4只能在vue3中使用

vue2中,要用vuex的3版本

vue3中,要用vuex的4版本

npm i vuex@3

---------------------------------------------------------------------------------------------------------------------------------

在脚手架里写import,不管import在哪个位置,它会扫描整个文件的import语句,然后把所有import语句按编写顺序汇总到最上方。所以如果在main.js中使用vuex的话,会优先执行

import store from './store'

然后再执行

Vue.use(Vuex)

导致顺序错误,所以在src/store/index.js中应用vuex插件

//引入Vue核心库
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用Vuex插件
Vue.use(Vuex)//准备actions对象——响应组件中用户的动作
const actions = {}
//准备mutations对象——修改state中的数据
const mutations = {}
//准备state对象——保存具体的数据
const state = {}//创建并暴露store
export default new Vuex.Store({actions,mutations,state
})

2.在main.js中创建vm时传入store配置项  让所有组件实例对象vc看见store

......
//引入store
import store from './store' //当没说哪个文件时,默认就是文件下的index.js
......//创建vm
new Vue({el:'#app',render: h => h(App),store
})

5.基本使用

  1. 初始化数据、配置actions、配置mutations,操作文件store.js

    //引入Vue核心库
    import Vue from 'vue'
    //引入Vuex
    import Vuex from 'vuex'
    //引用Vuex
    Vue.use(Vuex)const actions = {//响应组件中加的动作jia(context,value){// console.log('actions中的jia被调用了',miniStore,value)context.commit('JIA',value)},
    }const mutations = {//执行加JIA(state,value){// console.log('mutations中的JIA被调用了',state,value)state.sum += value}
    }//初始化数据
    const state = {sum:0
    }//创建并暴露store
    export default new Vuex.Store({actions,mutations,state,
    })
    
  2. 组件中读取vuex中的数据:$store.state.sum

  3. 组件中修改vuex中的数据:$store.dispatch('action中的方法名',数据) 或 $store.commit('mutations中的方法名',数据)

    备注:若没有网络请求或其他业务逻辑,组件中也可以越过actions,即不写dispatch,直接编写commit

-------------------------------------------------------------------------------------------------------------------------------

6.store全新配置项 getter

  1. 概念:当state中的数据需要经过加工后再使用时,可以使用getters加工。

  2. store.js中追加getters配置

    ......const getters = {bigSum(state){return state.sum * 10}
    }//创建并暴露store
    export default new Vuex.Store({......getters
    })
    
  3. 组件中读取数据:$store.getters.bigSum

-------------------------------------------------------------------------------------------------------------------------------

7.四个map方法的使用

import {mapState,mapGetters,mapActions,mapMutations} from 'vuex'

  1. mapState方法:用于帮助我们映射state中的数据为计算属性

    
    computed:{//  靠程序员自己亲自去写计算属性he(){return this.$store.state.sum},xuexiao(){return this.$store.state.school},xueke(){return this.$store.state.subject},//借助mapState生成计算属性 ,从state中读取数据 (对象写法)...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),//借助mapState生成计算属性 ,从state中读取数据 (数组写法) 生成的计算属性的名和你真正要读取的state中的名要相同// 相当于sum:'sum'...mapState(['sum','school','subject']),//  ...obj, 相当于把obj中内容依次取出放入到obj中
    出放入到obj中
    }
  2. mapGetters方法:用于帮助我们映射getters中的数据为计算属性

    computed: {/*bigSum(){return this.$store.getters.bigSum}*///借助mapGetters生成计算属性:bigSum(对象写法)...mapGetters({bigSum:'bigSum'}),//借助mapGetters生成计算属性:bigSum(数组写法)...mapGetters(['bigSum'])
    },
    
  3. mapActions方法:用于帮助我们生成与actions对话的方法,即:包含$store.dispatch(xxx)的函数

     //程序员自己写/*incrementOdd(){this.$store.dispatch('odd',this.n)},incrementWait(){this.$store.dispatch('wait',this.n)}*///借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(数组写法)...mapActions({incrementOdd:'odd',incrementWait:'wait'}),//借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象写法)//使用数组写法 点击事件名 和dispatch分发给actions的名字都要是'odd','wait'// ...mapActions(['odd','wait']),
  4. mapMutations方法:用于帮助我们生成与mutations对话的方法,即:包含$store.commit(xxx)的函数

    methods:{// 程序员自己写/* increment(){this.$store.commit('JIA',this.n)},decrement(){this.$store.commit('JIAN',this.n)},*///借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)...mapMutations({increment:'JIA',decrement:'JIAN'}),//借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(数组写法)//使用数组写法 点击事件名 和commit提交给mutations的名字都要是'JIA','JIAN'// ...mapMutations(['JIA','JIAN']),
    

备注:mapActions与mapMutations使用时,若需要传递参数(this.n)

需要在模板中绑定事件时传递好参数,否则参数默认是事件对象。

<button @click="increment(n)">+</button>

<button @click="decrement(n)">-</button>

<button @click="incrementOdd(n)">当前求和为奇数再加</button>

<button @click="incrementWait(n)">等一等在加</button>

Vue组件间通信--Vuex相关推荐

  1. Vue 组件间通信方法汇总

    Vue 组件间通信方法汇总 ⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅 除了使用 Vuex 方法外,vue 提供了各种各样的组件间通信的方案.文章整理一下父子组件.兄弟组件.祖先后代组件间 ...

  2. vue组件间通信六种方式

    vue组件间通信六种方式 组件之间的传值通信 组件之间的通讯分为三种:父传子.子传父.兄弟之间的通讯: props/$emit 父传子:主要是通过props来实现的 具体实现:父组件通过import引 ...

  3. Vue.js解析(十)【Vue组件间通信】

    什么是Vue组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊 ...

  4. Vue 组件间通信有哪几种方式

    Vue 组件间通信主要指以下 3 类通信:父子组件通信.隔代组件通信.兄弟组件通信 1.props / $emit 适用 父子组件通信 props是父组件将值传给子组件,$emit是子组件通过派发事件 ...

  5. vue组件间通信六种方式(完整版)

    前言   组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系:                如上图所示 ...

  6. 每日一道面试题:Vue 组件间通信有哪几种方式?

    Vue 组件间通信有哪几种方式? 父子组件通信.隔代组件通信.兄弟组件通信 (1)props / $emit适用 父子组件通信 - 这种方法是 Vue 组件的基础,相信大部分同学耳闻能详,所以此处就不 ...

  7. Vue 组件间通信几种方式(完整版)

    组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系: 如上图所示,A 和 B.B 和 C.B 和 D 都是 ...

  8. vue组件间通信传递数据的四种方式(路由传参、父子组件传参、兄弟组件传参、深层次传参)

    前言: vue组件间通信对于经常来写vue的伙伴来说应该是很轻松的,对于一些刚入门的伙伴来说可能就有些迷茫,感觉方式有很多种,但是总结起来又不知道应该怎么说,在下面的文章中,我结合自己的开发过程中经常 ...

  9. vue组件间通信之兄弟组件通信(vue3.0$EventBus)

    vue组件间通信之兄弟组件通信(vue3.0$EventBus) vue组件中的数据传递最最常见的就是父子组件之间的传递.父传子通过props向下传递数据给子组件:子传父通过$emit发送事件,并携带 ...

最新文章

  1. Android Splash界面支持用户点击 直接进入主界面
  2. BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧
  3. Laravel 日期时间处理包 Carbon 的应用
  4. 计算机辅助初中数学教学,初中数学合作教学如何融入计算机辅助教学
  5. Xamarin 从零开始部署 iOS 上的 Walterlv.CloudKeyboard 应用
  6. AI修复技术为何这么强?原来背后的技术是……
  7. InvalidCharacterError: Failed to execute 'setAttribute' on 'Element': ')' is not a valid
  8. leetcode - 279. 完全平方数
  9. STM32 软硬件调试
  10. Jsp+javascript打造二级级联下拉菜单
  11. mysql的读写分离工具_mysql 读写分离工具
  12. c语言 机器语言 汇编语言_多语言机器人新闻记者
  13. Scale-up and Scale-out
  14. JS编写人物行走动画
  15. python3修改文件的编码格式_python批量修改文件编码格式的方法
  16. idea java配色方案_IDEA 主题配色方案+字体
  17. 研发思维09----嵌入式智能产品开发经过思考
  18. 阿里云服务器ECS不能通过浏览器(外网)访问的解决办法
  19. win10 高分屏显示模糊的解决办法
  20. 如何使用Python还原村上春树笔下经典的那句“我爱你像爱春天的小熊”

热门文章

  1. Cadence Allegro 设计流程学习记录
  2. 怎样把图片文件转换成.ico图标文件?
  3. 博客园个人首页样式设置
  4. 数据中心机房基础设施运维管理体系
  5. 计算机与科学论文3000,计算机科学技术应用论文3000字(2)
  6. ubuntu20.04蚂蚁笔记(leanote)的使用
  7. 手把手教你C51单片机(史上最详细)
  8. ps4手柄usb线连接后可以玩电脑游戏
  9. 推导光的多普勒效应公式·比航专ppt更符合直觉
  10. win7更改桌面路径