安装:
npm i vuex
调试vuex的谷歌插件
vue.js devtools
新建文件store/index.js
import vuex from ‘vuex‘; import Vue from ‘vue‘;
import channels from "./channels"; //1.安装 Vue.use(vuex) var store = new vuex.Store({ //仓库对象 //2.配置 modules:{
channels
} }) export default store;
使用:main.js
import store form ‘./store‘
new Vue({
store
})
新建:store/channels.js 如何改动仓库数据(改动数据必须提教mutation)
export default {
namespaced: true,//开启命名空间
state:{
data: [],
isLoading: false,
}
mutation:{
//state :原来的状态
//payload: 负荷 需要传的值
setIsLoading(state,payload)
state.isLoading = payload
},
setData(state,payload){
state,data = payload
}
actions:{ //有副作用的操作一部操作
async fetchDate(context){
//设置isLoading为true
context.commmit("setIsLoading",true)
var channels = await getxxx()
context.commit(‘setData‘,channels)
coontext.commit("setIsLoading",false)
}
} }
组件:login.vue
如何在组件中使用store中的数据 及 更改
第一种写法获取store属性:
<templet>
</templet>
<script>
export default{
computed:{
isLoading(){
return this.$store.state.channels.isLoading
}
}
}
</script>
第二种辅助函数
<templet>
</templet>
<script>
import {mapState} from ‘vuex‘
export default{
computed:mapStete(‘channels‘,[‘data‘,‘isLoading‘]) //channnels 为命名空间的名字,数组为读取属性
create的(){
this.$store.commit(‘channels/setIsLoading‘,true) //提交一个mutation
}
} </script> 注释: 如果还有其他计算属性(es6属性展开运算符) computed:{ ...mapStete(‘channels‘,[‘data‘,‘isLoading‘]) , data(){ return 123 } }
例:
var obj = {
a:1,
b:2,
} var newObj = {
...obj,
c:3
}
输出结果为{a:1,b:2,c:3}
原文:https://www.cnblogs.com/whblogs/p/13715626.html