vue中安装及使用vuex

安装:

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}

 

posted @ 2020-09-22 23:47  WANGHUAN-  阅读(1932)  评论(0编辑  收藏  举报