vue.js的状态管理vuex中store的使用

一、状态管理(vuex)简介

vuex是专为vue.js应用程序开发的状态管理模式。它采用集中存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。vuex也集成刀vue的官方调试工具devtools extension,提供了诸如零配置的time-travel调试、状态快照导入导出等高级调试功能。

二、状态管理核心

状态管理有5个核心,分别是state、getter、mutation、action以及module。分别简单的介绍一下它们:

  • 1、state

    state为单一状态树,在state中需要定义我们所需要管理的数组、对象、字符串等等,只有在这里定义了,在vue.js的组件中才能获取你定义的这个对象的状态。

  • 2、getter

    getter有点类似vue.js的计算属性,当我们需要从store的state中派生出一些状态,那么我们就需要使用getter,getter会接收state作为第一个参数,而且getter的返回值会根据它的依赖被缓存起来,只有getter中的依赖值(state中的某个需要派生状态的值)发生改变的时候才会被重新计算
    如果不需要缓存的话,需要写成方法

  • 3、mutation

    更改store中state状态的唯一方法就是提交mutation,就很类似事件。每个mutation都有一个字符串类型的事件类型和一个回调函数,我们需要改变state的值就要在回调函数中改变。我们要执行这个回调函数,那么我们需要执行一个相应的调用方法:store.commit。

  • 4、action

    action可以提交mutation,在action中可以执行store.commit,而且action中可以有任何的异步操作。在页面中如果我们要嗲用这个action,则需要执行store.dispatch

  • 5、module

    module其实只是解决了当state中很复杂臃肿的时候,module可以将store分割成模块,每个模块中拥有自己的state、mutation、action和getter。

三、实例

首先建立一个vue.js项目,然后引入vuex

npm install vuex --save

而后建立一个 store 文件夹,建立一个 index.js。 在index.js中引入 vuevuex 在有需要的时候可以引入 axios。

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

Vue.use(Vuex)

const state  = {
    userList: [1, 2, 3, 4]
}

const  getters =  {
    getUrlParams: () => () => {
        let url = location.search; 
        let theRequest = {};
        if (url.indexOf("?") != -1) {
            var str = url.substr(1), strs;
            strs = str.split("&");
            for (var i = 0; i < strs.length; i++) {
                theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
            }
        }
        return theRequest;
    },
    getUserList: (state) => {
        //注:这里会缓存,只有执行了 actions,这里的缓存才会更新
        return state.userList;
    }
}
const mutations = {
    setUserList(state, data){
        // 如果这里的 userList 接口返回,可以用axios请求
        state.userList=data;
    }
}

const actions = {
    commitUserList:({commit}, userList) => commit('setUserList',userList)
}

const store = new Vuex.Store({
    state: state,
    getters: getters,
    mutations: mutations,
    actions: actions
})

export default store;

这样一个简单的 store 就已经完成了。

在界面中我们要怎么使用这个建立的状态管理呢:

  • 首先在main.js 引入 store:
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'

//实例化 vue 
new Vue({
    el: '#app',
    store,
    router,
    components: { App },
    template: '<App/>'
})
  • 然后在 components 目录 新建组件 index.vue, 组件里面就可以如下写:
<template>
    <ul>
        <li v-for="(user, index) in userList">{{index}} --- {{user}}</li>
    </ul>
    <div @click="updateUserList()">更新用户列表</div>
</template>
<script>
export default {
    name: "index",
    data() {
        return{
            userList: this.$store.getters.getUserList;//引入state中的对象
        }
    },
    methods:{
        updateUserList () {
            var item=['a':'b','c':'d'];
            this.$store.dispatch('setUserList', item);
        }
    }
}
</script>
  • router 里面设置访问地址
import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router);


export default new Router({
    mode: 'history', //目前使用 history 模式
    routes: [
        {
            path: '/',
            name: 'index',
            component:  resolve => require.ensure([], () => resolve(require('@/components/index.vue')), 'index')
        }
    ]
})


相关文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 3,050评论 0 7
  • Vuex是什么? Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件...
    萧玄辞阅读 3,238评论 0 6
  • Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有...
    skycolor阅读 932评论 0 1
  • 目录 - 1.什么是vuex? - 2.为什么要使用Vuex? - 3.vuex的核心概念?||如何在组件中去使用...
    我跟你蒋阅读 4,243评论 4 51
  • 系列文章:Vue 2.0 升(cai)级(keng)之旅Vuex — The core of Vue applic...
    6ed7563919d4阅读 4,694评论 2 58

友情链接更多精彩内容