VUEX的使用

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

从新建到使用过程

  • 建立文件结构
    在这里插入图片描述
    MODULES中文件的结构

  • xxxx.js
    在这里插入图片描述
    部分代码:

export default {
  namespaced: true, // 命名空间,由于多个vuex区别
  state: {
    // 初始化数据
    count: 5,
    todos: [
      { id: 1, text: "modules2true", done: true },
      { id: 2, text: "modules2false", done: false }
    ]
  },
  mutations: {
    increment(state) {
      // 变更状态
      state.count--;
    }
  }, // 用于修改state的唯一途径
  getters: {
    doTodo(state) {
      return state.todos.filter(todo => !todo.done);
    }
  }, // 用于数据的过滤和处理
  actions: {
    increment({ commit }, data) {
      commit("increment", data);
    }
  } // 提交mutations,可包含异步操作
};
  • index.js 文件(主要用于文件导入和store的新建和导出)
    在这里插入图片描述
import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)

const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

const store = new Vuex.Store({
  modules
})
console.log(modules, 16)
export default store

以上就是vuex的创建过程,下面讲解vue想的使用和全局挂载

  • 在main.js 上全局挂载
import store from './store'
new Vue({
  el: '#app', 
  store,
  components: { App },
  template: '<App/>'
})
  • 页面使用store数据及模块的方法
import { mapState, mapMutations, mapGetters, mapActions } from "vuex"; // 导入所需的数据

export default {
	name:'helloworld',
	data () {
		return {}
	},
	computed:{
	/* 基本用法
	...mapXXXX('modlue名字',['方法名',...可多个])
	**/
		...mapState('module1',['todos','count1','arg']), // 
	    ...mapState('module2',['count']),
	    ...mapGetters('module1',['doTodo']),
	    ...mapGetters('module2',['doTodo2'])
	},
	methods:{
	/* 基本用法
	...mapXXXX('modlue名字',['方法名',...可多个])
	**/
	...mapMutations('module1',['increment']),
    ...mapMutations('module2',['increment2']),
    ...mapActions('module1',['aincrement']),

	}
}
  • HTML渲染
 <div>vuex的使用</div>
   <br/>
   <div>module1.js的数据
     <div>{{todos}}</div>
     <div>{{count1}}</div>
     <div>{{arg}}</div>
   </div>
    <div>module2.js的数据
     <div>{{count}}</div>
   </div>
   <br/>
   <p>module1的getter</p>
   {{doTodo}}
   <p>module2的getter</p>
   {{doTodo2}}
   <br/>
   <p>modlue1的mutations</p>
   <button @click="increment">increment</button>
    <p>modlue2的mutations</p>
   <button @click="increment2">increment2</button>
   <br/>
   <p>modlue1的Actions</p>
   <button @click="aincrement(222)">Actions</button>
  • 还可以直接调用vuex的state数据
	<p>使用vue的prototype读取数据</p>
   <p>{{$store.state.module2.count}}</p>

以上就是vuex的基本用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值