Vuex安装以及简单封装

一、安装Vuex依赖

npm install vuex --save

二、简单封装

下面进行基本的封装
在src下面创建一个名为state的文件夹里面包含:index.js,actions.js ,mutations.js,type.js ,state.js。

state.js:
state是个仓库来存储数据,没有操作,这里存了三个空数组。

const state={
  /*
    首页
  */
  	data:0,
    bannerLbs:[], //首页轮播图
    hotPostLbs:[], //热门帖子
    recommendArticle:[],//推荐文章
}
export default state

actions.js:
这里是最接近页面处理请求的操作文件,不过这里只是将页面所发起的操作提交到 mutation,而不是直接变更状态。
Action 可以包含任意异步操作

const actions={
  /*
    *首页*
  */
    bannerTest({commit},data){ //资讯信息
      commit('BANNER_TEST',data) //根据BANNER_LBS这个名字到mutation.js找到相关操作
    },
    hotPostTest({commit},data){ //热门帖子
      commit('HOTPOST_TEST',data)
    },
    recommendArticleTest({commit},data){ //推荐文章
      commit('RECOMMEND_ARTICLE_TEST',data)
    },
......
}
export default actions //导出

type.js:
主要存固定的变量方法名

export const BANNER_TEST ='BANNER_TEST' //资讯信息
export const HOTPOST_TEST ='HOTPOST_TEST' //热门帖子
export const RECOMMEND_ARTICLE_TEST ='RECOMMEND_ARTICLE_TEST' //推荐文章
//把所有matutaions里面所需要的操作记录在这里面,集中在一起使得你可以很直观的看到你的模块或者app具有哪些状态以及状态变化

mutations.js:
这里是将从action.js提交过来的处理请求进行处理,直接state.js也就是仓库里的数据进行修改或者其他操作

import state from './state'
import * as type from './type.js'  //导入type.js的所有记录
const matutaions={
  /*
    *首页*
  */
    [type.HOT_POST_LBS](state,data){//热门帖子
      state.hotPostTest= data;
    },
    [type.RECOMMEND_ARTICLE](state,data){//推荐文章
      state.recommendArticleTest= data;
},
......
}
export default matutaions

index.js:
上面几个都需要在这里进行注册

import Vuex from 'vuex'
import state from './state'//仓库
import mutations from './mutations'//仓库数据处理
import actions from './actions'//提交数据
Vue.use(Vuex)
export default new Vuex.Store({  //导出
    state,
    mutations,
    actions
})

main.js:
将上述导出的仓库在main.js注册

import store from './vuex/index' 
new Vue({
  el: '#app',
  router,
  store,
  components: {App},
  template: '<App/>'
})

页面使用:
修改仓库数据:

this.$store.dispatch("bannerTest", data);//dispatch('actions里的方法',传入的数据)

调用仓库数据:

this.bannerImgList=this.$store.state.bannerLbs //

不过关于调用还有一种方法:
这种方法比较方便,不需要每次都写个this.$store.state,也不需要把这个值赋值给data里面的数据,也可以实时更新。

//在页面:
import { mapState } from "vuex";
//计算属性里面:
computed: {
    ...mapState(["data", "hotPostLbs"])
  },
  //这样直接可以在组件内使用

  computed: {
    ...mapState({
        bgimg: state => {
          return state.user.bgimg
          },
    })
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值