vuex/init

308 阅读1分钟

index.js

import Vue from 'vue';
import Vuex from 'vuex';
import 'es6-promise/auto';

import state from './State';
import mutations from './Mutations';
import actions from './Actions';
import getters from './Getters';
import moduleA from './ModuleA';
import myPlugins from './Plugins';

Vue.use(Vuex)

export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters,
    plugins:[myPlugins],
    modules: {
        moduleA,
        moduleB: {
            namespaced: true,
            state: {
                countB: 100
            },
            mutations: {
                incrementB(state) {
                    state.countB++
                },
                decrementB(state) {
                    state.countB--
                }
            }
        }
    }
})
if (module.hot) {
    // 使 action 和 mutation 成为可热重载模块
    module.hot.accept(['./State', './Mutations', './Actions', './Getters', './ModuleA'], () => {
        // 获取更新后的模块
        // 因为 babel 6 的模块编译格式问题,这里需要加上 `.default`
        const newState = require('./State').default
        const newMutations = require('./Mutations').default
        const newActions = require('./Actions').default
        const newGetters = require('./Getters').default
        const newModuleA = require('./ModuleA').default
        // 加载新模块
        store.hotUpdate({
            state: newState,
            mutations: newMutations,
            actions: newActions,
            getters: newGetters,
            modules: {
                moduleA: newModuleA
            }
        })
    })
}

state.js

export default {
    count: 0,
    product: {},
    msg1:'',
    msg2:''
}

mutations.js

export default {
    increment(state,{num}){
        state.count+=num
    },
    decrement(state,num){
        state.count-=num
    },
    setProduct(state,payload){
        state.product=payload
    },
    updateMsg1(state,info){
        state.msg1=info
    },
    updateMsg2(state,info){
        state.msg2=info
    }
}

actions.js

import axios from 'axios';
export default {
    incrementActions({commit},num){
        commit('increment',num)
    },
    decrementActions({commit},num){
        commit('decrement',num)
    },
    setProductActions({commit},{payload}){
        axios.get("http://iwenwiki.com/api/music/list.php",{
            params:payload
        })
        .then(res=>{
            console.log(res.data)
            commit('setProduct',res.data.billboard.name)
        })
        
    }
}

getters.js

export default {
    getCount:(state)=>{
        if(state.count<0){
            return 0;
        }else{
            return state.count
        }
    }
}

plugins.js

const myPlugin = store => {
    store.subscribe((mutation,state)=>{
        console.log(mutation.type,mutation.payload)
    })
}
export default myPlugin;

moduleA.js

export default {
    namespaced:true,
    state:{
        countA:10
    },
    mutations:{
        incrementA(state,{num}){
            state.countA+=num;
        },
        decrementA(state,{num}){
            state.countA-=num;
        }
    },
    actions:{
        incrementAActions({commit},num){
            commit('incrementA',num)
        },
        decrementAActions({commit},num){
            commit('decrementA',num)
        }
    },
    getters:{
        getCountA:(state)=>{
            if(state.countA<0){
                return 0;
            }else{
                return state.countA;
            }
        }
    }
}