Vue

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

2019-05-08  本文已影响12人  sphenginx

一、状态管理(vuex)简介

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

二、状态管理核心

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

三、实例

首先建立一个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 就已经完成了。

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

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/>'
})
<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>
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')
        }
    ]
})


相关文章

上一篇下一篇

猜你喜欢

热点阅读