一、何为vuex?

  vuex其实是一种状态管理模式,那么什么是状态管理模式呢?简单的理解就是把一些状态或者数据集中到一个地方管理,然后所有的组件共享这些数据,当数据改变时,用到这些数据的组件也会相应的改变,有点类似redux。

二、什么情况下用到vuex呢?

  1.首先看你的项目大小,如何你开发的是一个小项目,数据结构不是那么复杂,如果需要存少量的共享数据,完全可以放到localstorage里边就好,或者可以起一个空的vue实例作为事件的总线,比如var abc=new Vue(),比如在A组件触发,abc.$emit("event1"),然后B组件监听abc.$on("event1")。

  2.当你的项目是个单页面的大型应用,数据结构比较复杂,组件之间需要相互共享一些数据以及每个组件都可以更改这些数据的,或者当这些共享数据改变的时候其他用到这些数据的组件会自动的发生变化。这时候你就需要vuex来集中管理这些状态数据。

三、如何使用vuex

1.文档地址

vuex有专门的官方的详细文档,可以供大家查阅:https://vuex.vuejs.org/zh-cn/

2.安装依赖

npm install vuex --save

3.建立目录结构

3.1  在项目src目录下新建一个store的文件夹,专门用于管理vuex的数据。

3.2  文件夹里边再新建一个modules的文件夹(模块文件夹),为了将store模块化切割,这样防止所有的对象集中到一个state下,造成store对象很臃肿,不利于维护,所有modules文件可以有效的解决这个问题,每个模块都拥有state,mutation,action,getter。

detail.js代码如下:

import * as types from '../mutation-types'

// initial state
const state = {
activeId:0,
} // getters
const getters = {
getActiveId: state => state.activeId
} // actions
const actions = {
setDetailId ({ commit }) {
commit(types.SET_DETAIL_ID, { id })
} } // mutations
const mutations = {
[types.SET_DETAIL_ID] (state, { id }) {
state.activeId = id
}
} export default {
state,
getters,
actions,
mutations
}

user.js代码如下:

import * as types from '../mutation-types'

// initial state
const state = {
username:'',
count:0
} // getters
const getters = {
getUsername: state => state.username,
getCount: state => state.count,
} // actions
const actions = {
loginInfoAction ({ commit },name) {
commit(types.LOGIN_INFO,name)
},
addCount ({ commit }) {
commit(types.ADD_COUNT)
}
} // mutations
const mutations = {
[types.LOGIN_INFO] (state,name) {
state.username = name
},
[types.ADD_COUNT] (state) {
state.count++
},
} export default {
state,
getters,
actions,
mutations
}

3.3  新建一个mutation-types.js文件,用于管理所有的事件名称。

mutation-types.js代码如下:

export const GET_USER_INFO = 'GET_USER_INFO'
export const ADD_COUNT = 'ADD_COUNT'
export const LOGIN_INFO = 'LOGIN_INFO'
export const SET_DETAIL_ID = 'SET_DETAIL_ID'

3.4  新建一个getter.js,作为全局处理getter,对模块里边的state进行再处理

3.5 新建一个action.js ,作为全局事件处理,对模块里边的action进行再处理。

3.6  新建一个index.js的文件,用于对外输出store。代码如下:

import Vue from 'vue'
import Vuex from 'vuex'
import * as actions from './actions'
import * as getters from './getters'
import detail from './modules/detail'
import user from './modules/user' Vue.use(Vuex) const debug = process.env.NODE_ENV !== 'production' export default new Vuex.Store({
actions,
getters,
modules: {
detail,
user
},
})

四、在main.js里边引用vuex

4.1  引入:import store from './store'

4.2 注册:

new Vue({
  el: '#app',
  router,
  store,
  template: '<App/>',
  components: { App }
})

五、在组件中使用vuex

5.1  在components文件下新建一个login.vue,引用了两个action,点击登录按钮的时候调用loginInfoAction方法,点击+1按钮调用addCount方法。

<template>
<div>
用户名:<input type="text" v-model="user"/>
<button @click="loginInfoAction(user)">登录</button>
计数增加<button @click="addCount">+1</button>
</div>
</template> <script>
import { mapGetters, mapActions } from 'vuex'
export default{
data(){
return{
user:''
}
},
methods:{
...mapActions([
'loginInfoAction', // 将 `this.loginInfoAction(name)` 映射为 `this.$store.dispatch('loginInfoAction',name)`
'addCount' // 将 `this.addCount` 映射为 `this.$store.dispatch('addCount')`
]),
}
}
</script> <style>
</style>

5.2  在HelloWorld.vue里使用login.vue,以及用getter取getUsername,getCount这两个状态。

<template>
<div class="hello">
<div class="login">
<h2>login:</h2>
<login></login>
</div>
<h1>{{ msg }}</h1>
<div>{{username}}</div>
<div>{{count}}</div>
</div>
</template> <script>
import { mapGetters } from 'vuex'
import login from './login.vue'
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
computed: {
...mapGetters({
username: 'getUsername',
count: 'getCount'
})
},
components:{
login
}
}
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>

5.3  当我在login组件里边输入姓名以及点击加1按钮,HelloWorld组件使用state的地方就会相应的改变。

这里就简单的做了一个小demo说明了下怎么使用vuex,实际项目还得结合需求来使用,谢谢大家。

如何使用vuex的更多相关文章

  1. 关于Vue.js 2.0 的 Vuex 2.0,你需要更新的知识库

    应用结构 实际上,Vuex 在怎么组织你的代码结构上面没有任何限制,相反,它强制规定了一系列高级的原则: 应用级的状态集中放在 store 中. 改变状态的唯一方式是提交mutations,这是个同步 ...

  2. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  3. vuex 初体验

    vuex是vue的状态管理工具,vue进阶从es6和npm开始,es6推荐阮一峰大神的教程. vuex学习从官方文档和一个记忆小游戏开始.本着兴趣为先的原则,我先去试玩了一把-->. Vuex ...

  4. vuex(1.0版本写法)

    Vuex 是一个专门为 Vue.js 应用所设计的集中式状态管理架构. 官方文档:http://vuex.vuejs.org/zh-cn/  2.0和1.0都能在此找到 每一个 Vuex 应用的核心就 ...

  5. 关于Vue vuex vux 文档

    01. vue 链接 http://vuejs.org.cn/guide/ 02. vuex  ----->>状态管理模块儿<<------- https://vuex.vue ...

  6. vuex

    英文:(Introduction)中文:https://github.com/vuejs/vuex/issues/176(贡献者努力中)

  7. Vue 2.0 + Vue Router + Vuex

    用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...

  8. Vue2.X的状态管理vuex记录

    记住上述的顺序情况:想要改变state,只能通过Mutation,虽然action可以直接改变state,这样会使每个状态可以方便的跟踪和记录(用Devtools跟踪) vue Method   -- ...

  9. 在vue1.0遇到vuex和v-model的坑

    事情是这样的,在开发项目的过程中我使用了vuex并且在store中定义了一个保存用户信息的对象 userInfo : { 'nickName' : '', // 昵称 'password' :'', ...

  10. vuex 笔记

    Vuex 笔记 一个简单的状态管理 单一数据源: const sourceOfTruth = {} const vmA = new Vue({ data: sourceOfTruth }) const ...

随机推荐

  1. RFID电动车管理,智慧城市物联网建设的入口

    原谷歌CEO施密特说:"我可以非常直接地说,互联网将消失." 互联网在20多年来帮助人们解决了信息共享.交互,几乎在瞬间颠覆了很多传统的商业模式,把卖产品变为卖内容和服务,是个了不 ...

  2. Mariadb Galera Cluster 群集 安装部署

    #Mariadb Galera Cluster 群集 安装部署 openstack pike 部署  目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...

  3. ML笔记:Where does the error come from?

    error来自哪? 来自于偏差Bias和方差Variance. 就如打靶时瞄准一个点f平均,打出的点f星分布在该点周围. 该点与实际靶心f帽的距离就是偏差Bias, 打出的点与该点的分布距离就是方差V ...

  4. 这一次带你彻底了解Cookie

    前言 网络早期最大的问题之一是如何管理状态.简而言之,服务器无法知道两个请求是否来自同一个浏览器.当时最简单的方法是在请求时,在页面中插入一些参数,并在下一个请求中传回参数.这需要使用包含参数的隐藏的 ...

  5. window下phpstudy的nginx配置虚拟主机

    由于很长时间没有配置Apache,虽然说知道怎么配置nginx,但是还是花费了一些时间这次记下来下次直接用 在其他选项文件菜单中->打开配置文件->选择vhosts-conf nginx的 ...

  6. ViewPager使用记录3——循环展示

    ViewPager是v4支持库中的一个控件,相信几乎所有接触Android开发的人都对它不陌生.之所以还要在这里翻旧账,是因为我在最近的项目中有多个需求用到了它,觉得自己对它的认识不够深刻.我计划从最 ...

  7. 分享一小坑(与swagger有关),以后碰到了可以快速规避

     ---------------------------------------------------------------------------------踩坑过程:①webapi的某acti ...

  8. 打开和创建SqlCe(.sdf文件)

    打开SqlCe的工具有些少,目前能看到Vs2010安装插件之后打开.sdf文件 [转载]https://weblogs.asp.net/scottgu/vs-2010-sp1-and-sql-ce 需 ...

  9. 两行 CSS 代码实现 PNG 任意颜色赋色技术

    很久之前在张鑫旭大大的博客看到过一篇 PNG格式小图标的CSS任意颜色赋色技术,当时惊为天人,感慨还可以这样玩,私底下也曾多次想过有没有其他方法可以实现. 本方法与上面 ZXX 的方法及流传的使用 f ...

  10. SharePoint 2010 Url Shortener --SharePoint 2010 短URL生成器

    SharePoint 2010 Url Shortener --SharePoint 2010 短URL生成器 项目描写叙述 本项目加入了这种功能.在SP站点中能够生成短URLs. 这些URLs指向列 ...