npm install vuex --save




  • state,驱动应用的数据源;
  • view,以声明方式将state映射到视图;
  • actions,响应在view上的用户输入导致的状态变化。

 

store/index.js



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

Vue.use(Vuex)

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

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;
},
mutationsAddCount(state, n = 0) {
return (state.count += n)
},
mutationsReduceCount(state, n = 0) {
console.log(n)
return (state.count -= n)
}

}
const actions={
actionsAddCount(context, n = 0) {
console.log(context)
return context.commit('mutationsAddCount', n)
},
actionsReduceCount({ commit }, n = 0) {
return commit('mutationsReduceCount', n)
},
commitUserList:({commit}, userList) => commit('setUserList',userList)
}

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

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

export default store;


demo:



,<template>
<div id="demo54">
<ul>
<li v-for="(user,index) in userList" :key="index">{{index}}----{{user}}</li>
</ul>
<button @click="updateUserList()">更新用户列表</button>
</div>
</template>

<script>
export default {
data() {
return {
userList: this.$store.getters.getUserList //引入state中的对象
};
},
methods: {
updateUserList () {
var item = ["a", "b", "c", "d"];
this.$store.dispatch('setUserList', item);
}
}
};
</script>

<style>
</style>


demo2:



<template>
<div class="demo55">
<h3>{{$store.state.count}}</h3>
<button @click="handleAddClick(10)">增加</button>
<button @click="handReduceClick(10)">减少</button>
</div>
</template>

<script>
export default {
data() {
return {};
},
methods: {
handleAddClick(n) {
this.$store.commit("mutationsAddCount",n)
},
handReduceClick(n) {
this.$store.commit("mutationsReduceCount", n);
}
}
};
</script>


 


此随笔或为自己所写、或为转载于网络。仅用于个人收集及备忘。