Vuex(多组件数据共享的Vue插件)搭建与使用

目录
  • 1.概念
  • 2.何时使用
  • 3.搭建Vuex环境
  • 4.Vuex使用
  • 5.getters的使用
  • 6.四个map方法的使用
  • 7.模块化+命名空间
  • 总结

1.概念

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

2.何时使用

多个组件需要共享数据时。

3.搭建Vuex环境

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

//引入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配置项

...
import store from './store/index.js'
...
​
//
new Vue({
    el:'#app',
    render:h => h(App),
    store
})

4.Vuex使用

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

//引入Vue核心库
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用Vuex插件
Vue.use(Vuex)
​
//准备actions对象-响应组件中用户的行为
const actions = {
    //响应组件中jia的动作
    jia(context,value){
        context.commit('JIA',value)
    }
}
//准备mutations对象-修改state中的状态(数据)
const mutations = {
    //执行JIA
    JIA(state,value){
        state.sum+=value
    }
}
//准备state对象-保存具体数据
const state = {
    sum:0
}
​
//创建并暴露store
export default new Vuex.Store({
    actions,
    mutations,
    state
})

2.组件中读取Vuex中的数据:$store.state.sum

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

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

5.getters的使用

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

6.四个map方法的使用

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

computed:{
    //借助mapState生成计算属性:sum、school、subject(对象写法)
    ...mapState({sum:'sum',school:'school',subject:'subject'}),

    //借助mapState生成计算属性:sum、school、subject(数组写法)
    ...mapState(['sum','school','subject']),
}

2.mapGetters方法:用于帮助我们映射getters中的数据为计算属性

computed:{
    //借助mapGetters生成计算属性:bigSum(对象写法)
    ...mapState({bigSum:'bigSum'}),

    //借助mapGetters生成计算属性:bigSum(数组写法)
    ...mapState(['bigSum']),
}

3.mapActions方法:用于帮助我们生成与actions对话的方法,即包含$store.dispatch(xxx)的函数

methods:{
    //靠mapActions生成:incrementOdd、incrementWait(对象写法)
    ...mapState({incrementOdd:'jiaOdd',incrementWait:'jiaWait'}),

    //靠mapActions生成:incrementOdd、incrementWait(数组写法)
    ...mapState(['incrementOdd':'jiaOdd','incrementWait':'jiaWait']),
}

4.mapMutations方法:用于帮助我们生成与mutations对话的方法,即包含$store.commit(xxx)的函数

methods:{
    //靠mapMutations生成:increment、decrement(对象写法)
    ...mapState({increment:'jia',decrement:'jian'}),

    //靠mapMutations生成:increment、decrement(数组写法)
    ...mapState(['increment':'jia','decrement':'jian']),
}

<!--备注:mapActions与mapMutations,若需要传递参数:需要在模板中绑定事件时传递好参数,否则参数是事件对象。-->

7.模块化+命名空间

1.目的:让代码更好维护,让数据分类更加明确。

2.修改store.js

const countAbout = {
    namespaced:true,//开启命名空间
    state:{...},
    actions:{
        jiaOdd(context,数据){...}
    },
    mutations:{
        jia(state,数据){...}
    },
    getters{
        bigSum(state){...}
    }
}
​
const personAbout = {
    namespaced:true,//开启命名空间
    state:{
        list:[...]
    },
    actions:{...},
    mutations:{...},
    getters{...}
}

const store = new Vuex.Store({
    modules:{
        countAbout,
        personAbout
    }
})

3.开启命名空间后,组件读取state数据:

//方式一:自己读取
this.$store.state.personAbout.list
//方式二:借助mapState读取
...mapState('personAbout',['list'])

4.开启命名空间后,组件读取getters数据:

//方式一:自己读取
this.$store.getters['countAbout/bigSum']
//方式二:借助mapGetters读取
...mapGetters('countAbout',['bigSum'])

5.开启命名空间后,组件中调用dispatch:

//方式一:自己直接dispatch
this.$store.dispatch('countAbout/jiaOdd',数据)
//方式二:借助mapActions读取
...mapActions('countAbout',['incrementOdd':'jiaOdd'])

6.开启命名空间后,组件中调用commit:

//方式一:自己直接commit
this.$store.commit('countAbout/jia',数据)
//方式二:借助mapMutations读取
...mapMutations('countAbout',['increment':'jia'])

总结

到此这篇关于Vuex(多组件数据共享的Vue插件)搭建与使用的文章就介绍到这了,更多相关多组件数据共享Vue插件Vuex内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue局部组件数据共享Vue.observable()的使用

    随着组件的细化,就会遇到多组件状态共享的情况, Vuex当然可以解决这类问题,不过就像 Vuex官方文档所说的,如果应用不够大,为避免代码繁琐冗余,最好不要使用它,今天我们介绍的是 vue.js 2.6 新增加的 Observable API ,通过使用这个 api 我们可以应对一些简单的跨组件数据状态共享的情况. 创建store对象 首先创建一个 store.js,包含一个 store和一个 mutations,分别用来指向数据和处理方法. //store.js import Vue from

  • Vue组件之间数据共享浅析

    目录 组件数据共享 父组件向子组件共享数据 子组件向父组件共享数据 兄弟组件共享数据 组件数据共享 组件之间的关系:在项目开发中,组件之间的最常用的关系分为两种:父子关系和兄弟关系. 父组件向子组件共享数据 通过自定义属性实现父向子传值. 子组件向父组件共享数据 通过自定义事件实现子向父传值 兄弟组件共享数据 在 vue2.x中,兄弟组件之间数据共享方案是 EventBus. EventBus的使用步骤: 1)创建eventBus.js模块,并向外共享一个Vue的实例对象 import Vue

  • Vue.js中使用Vuex实现组件数据共享案例

    当组件中没有关联关系时,需要实现数据的传递共享,可以使用Vuex 先不管图片 一.安装 在vue cli3中创建项目时勾选这个组件就可以了 或者手动安装 npm install store --save 二.使用 main.js store.js .vue文件 图片中的js文件中有 三部分 分别与图片上对应 1. state中存储数据 2. 而数据的修改需要先经过action的dispatch方法 (不需要异步获取的数据可以不经过这一步,如上图) 3. 然后经过matations的commit方

  • Vue组件之间的数据共享详解

    目录 一.在项目开发中,组件之间的最常见的关系分为如下两种: 1.1 父子组件之间的数据共享 1. 父 -> 子共享数据 2.子 -> 父共享数据 1.2 兄弟组件之间的数据共享 总结 一.在项目开发中,组件之间的最常见的关系分为如下两种: 1.父子关系 2.兄弟关系 1.1 父子组件之间的数据共享 父子组件之间的数据共享又分为: 1. 父 -> 子共享数据 子组件: 父组件: 2.子 -> 父共享数据 子组件向父组件共享数据使用自定义事件.示例代码如下 子组件: 父组件: 页面显

  • Vue中组件的数据共享分析讲解

    目录 组件之间的关系 父子组件之间的数据共享 兄弟组件之间的数据共享 EventBus的使用步骤 组件之间的关系 在项目开发中,组件之间的最常见的关系分为两种 父子关系 兄弟关系 父->子共享数据 父组件向子组件共享数据需要使用自定义属性. 父子组件之间的数据共享 父组件: <template> <div id="app"> <h1>app根组件</h1> <left :msg="message" :use

  • Vue  vuex配置项和多组件数据共享案例分享

    目录 getters 配置项 mapState.mapGetters mapActions.mapMutations 多组件共享数据 没有看过上一篇的同学可以查看: Vue Vuex搭建vuex环境及vuex求和案例分享 getters 配置项 index.js 中增加 getters 配置项 //准备getters,用于将state中的数据进行加工 const getters = {     bigSum(state){         return state.sum*10     } }

  • vue实现两个组件之间数据共享和修改操作

    我们在使用vue开发过程中会遇到这样的情况,在父组件中引入了子组件,需要将父组件的值传到子组件中显示,同时子组件还可以更改父组件的值. 以我目前的一个项目的开发为例,如下图页面: 在父组件中,我引入了两个子组件,一个是左边的导航栏,还有中间的一个富文本编译器组件,当我点击左边导航栏时,中间的页面会切换,也就是改变引入的子组件. 怎么实现呢,首先,设置在该页面index.vue中设置一个变量index,左边导航栏每一项也对应一个index值,导航菜单绑定select函数,@select="hand

  • Vuex(多组件数据共享的Vue插件)搭建与使用

    目录 1.概念 2.何时使用 3.搭建Vuex环境 4.Vuex使用 5.getters的使用 6.四个map方法的使用 7.模块化+命名空间 总结 1.概念 在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态(数据)进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信. 2.何时使用 多个组件需要共享数据时. 3.搭建Vuex环境 1.创建文件:src/store/index.js //引入Vue核心库 import Vue from

  • Vue插件实现过程中遇到的问题总结

    目录 场景介绍 插件实现 问题一.重复的头部组件 问题二.另一种实现思路 问题三.是否可以不使用Vue.extend 总结 场景介绍 最近做H5遇到了一个场景:每个页面需要展示一个带有标题的头部.一个实现思路是使用全局组件.假设我们创建一个名为TheHeader.vue的全局组件,伪代码如下: <template> <h2>{{ title }}</h2> </template> <script> export default { props:

  • vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据

    在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-server模拟的接口,这个前面的文章中有提到,需要的可以去翻阅. 整个的流程是在组件的created中提交dispatch,然后通过action调用一个封装好的axios然后再触发mutation来提交状态改变state中的数据,然后在组件的计算属性中获取state的数据并渲染在页面上 首先新需要在项

  • vue项目搭建以及全家桶的使用详细教程(小结)

    前言 vue是现阶段很流行的前端框架,很多人通过vue官方文档的学习,对vue的使用都有了一定的了解,但再在项目工程化处理的时候,却发现不知道改怎么更好的管理自己的项目,如何去引入一些框架以及vue全家桶其他框架的使用,以下将详细地介绍本人在处理工程文件构建的过程:对于刚开始解除vue的新手,建议使用官方脚手架vue-cli,当然,如果你对于webpack很熟悉,你也可以自己动手搭建自己的脚手架,当然如果你没把握的话,还是推荐使用vue-cli,能更好的帮助你搭建项目: 步骤一.安装vue-cl

  • 详解基于webpack和vue.js搭建开发环境

    前言 在对着产品高举中指怒发心中之愤后,真正能够解决问题的是自身上的改变,有句话说的好:你虽然改变不了全世界,但是你有机会改变你自己.秉承着"不听老人言,吃亏在眼前"的优良作风,我还是决定玩火自焚. 问题所在 之前的项目总结为以下内容: 1.AMD模块规范开发,使用requirejs实现,使用rjs打包,最终导致的结果是,输出的项目臃肿,肿的就像一坨狗不理--不忍直视 2.使用gulp进行打包,这一点貌似没有可吐槽的地方,毕竟都是被grunt折磨过来的-- 3.数据的渲染使用模板引擎,

  • vue 插件的方法代码详解

    在开发项目的时候,我们一般都用 vue-cli 来避免繁琐的 webpack 配置和 template 配置.但是官方 cli3 现在并不支持搭建 plugin 开发的项目. 还好,已经有大神(Kazupon)走在了我们前面,我们就用现成的vue-cli-plugin-p11n. 如果你没有安装 vue-cli,请先安装 npm i -g @vue/cli 首先,搭建项目 vue create [your plugin name] && cd [your plugin name] vue

  • Vue环境搭建+VSCode+Win10的详细教程

    一.安装Node.js(js的运行环境) 1.在Node.js官网https://nodejs.org/en/download/ 下载安装包. 2.下载后进行安装. 3.打开命令行,输入node -v可以查看到版本号.输入npm –v可看到npm版本号. 新版的Node.js已自带npm(类似.net中的nuget包管理器),安装Node.js时会一起安装.(将来要更新npm可用这个命令npm intall npm@latest -g) 4.在我的win10系统中可以看到环境变量也已经自动配置好

随机推荐