在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、简介我们来看看对 Vuex 比较专业的介绍:
简而言之,Vuex 采用类似全局对象的形式来管理所有组件的公用数据,如果想修改这个全局对象的数据,得按照Vuex提供的方式来修改(不能自己随意用自己的方式来修改)。 二、优点Vuex状态管理跟使用传统全局变量的不同之处:
三、使用步骤1. 安装Vuexnpm install vuex --save 2. 引用Vueximport Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) 3. 创建仓库Store要使用 Vuex,我们要创建一个实例 //创建一个 store const store = new Vuex.Store({}); 四、包含模块
Vuex的作用类似全局对象,Vuex 使用单一状态树,用一个对象State包含了整个应用层级的所有状态,你可以理解为这些状态就是一堆全局变量和数据。 1. State假设我们有一个全局状态 //创建一个 store const store = new Vuex.Store({ //state存储应用层的状态 state:{ count:5 //总数:5 } }); 2. Getters可以认为, 假设我们要在
const store = new Vuex.Store({ //state存储应用层的状态 state:{ count:5 //总数:5 }, getters:{ newCount:state => state.count * 3 } }); 在组件中获取 export default { computed: { newCount(){ return this.$store.getters.newCount; } } }; 3. Mutations
我们在 会接受 const store = new Vuex.Store({ //state存储应用层的状态 state:{ count:5 //总数:5 }, // mutations是修改state中数据的唯一途径 mutations:{ increment(state,value){ state.count += value; } } }); 我们在提交 methods: { getVal(event) { //获取当前的按键的值 let value = event.target.dataset.value; //通过commit提交一个名为increment的mutation this.$store.commit("increment", value); } } 在组件中获取 export default { computed: { count(){ return this.$store.state.count; } } }; 4. Action
export default new Vuex.Store({ //存放数据 state: { obj: {}, }, //4. 通过commit mutations中的方法来处理 mutations: { getParam(state, Object) { //5.修改state中的数据 state.obj = Object } }, //2.接受dispatch传递过来的方法和参数 actions: { getParamSync(store, Object) { // 处理异步操作 setTimeout(() => { //3.通过commit提交一个名为getParam的mutation //action 函数接收一个 store 的实例对象,因此你可以调用 store.commit 提交一个 mutation store.commit('getParam', Object); }, 1000) } } }) 然后我们就在组件里这么调用就可以了 methods: { getVal() { let name= 'xia'; let age= '26'; let sex= 'man'; //1.通过dispatch将方法getParamSync和多个参数{name,age,sex}传递给actions this.$store.dispatch('getParamSync',{name,age,sex}) } } 5. Modules随着项目的复杂度增大,为了方便管理 Vuex,一般会将其按功能分割成不同的模块( import Vue from 'vue' import Vuex from 'vuex' import state from './state' import mutations from './mutations' import actions from './actions' import * as getters from './getters' import moduleA from './module/moduleA' // 模块A import moduleB from './module/moduleB' // 模块B Vue.use(Vuex) export default new Vuex.Store({ actions, getters, state, mutations, modules: { moduleA, moduleB } })
// 每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块 export default { state: { text: 'moduleA' }, getters: {}, mutations: {}, actions: {} } 然后我们就在组件里这么调用就可以了 <template> <div class="demo"> <h1>{{getText1}}</h1> <h1>{{getText2}}</h1> </div> </template> computed: { getText1(){ return this.$store.state.moduleA.text; }, //或 ...mapState({ getText2: state => state.moduleB.text; }) } 由此可知,模块内部的 state 是局部的,只属于模块本身所有,所以外部必须通过对应的模块名进行访问。 五、Vuex最最简单的项目实例运用vuex语法糖 1. 存储数据a.vue 文件 import { mapMutations } from "vuex"; // 引入mapMutations export default { methods: { ...mapMutations({ // 将changeNews与mutations中的SET_NEWS关联 changeNews: "SET_NEWS" }), submit(){ // 提交一个名为changeNews的mutation,并传入参数val let val = 'test news'; this.changeNews(val);// 相当于this.$store.commit("changeNews", val); } } } 2. 获取数据b.vue 文件 import { mapGetters } from "vuex"; // 引入mapGetters export default { computed: { // 用vuex读取数据(读取的是getters.js中的数据) // 相当于this.$store.getters.news(vuex语法糖) ...mapGetters(["news"]) }, created() { // 获取getters中news数据 console.log(this.news); } } 3. store文件目录结构index.jsimport Vue from 'vue' import Vuex from 'vuex' import state from './state' import mutations from './mutations' import actions from './actions' import * as getters from './getters' //每次修改state都会在控制台打印log import createLogger from 'vuex/dist/logger' Vue.use(Vuex) const debug = process.env.NODE_ENV !== 'production' export default new Vuex.Store({ actions, getters, state, mutations, strict: debug, // 当debug=true时开启严格模式(性能有损耗) plugins: debug ? [createLogger()] : [] }) state.jsconst state = { news: {} } export default state; mutations.jsconst mutations = { SET_NEWS(state, val) { state.news= val } } export default mutations; actions.js//异步处理 const actions = { M_NEWS({ commit }, val) { commit('SET_NEWS', val); // commit mutations修改 } } export default actions; getters.js// 通常通过getters取数据 (this.$store.getters.news;) export const news = state => state.news // 不做其他处理 直接映射出去 4. 使用store在 import store from './store' //vuex存储文件 new Vue({ el: '#app', router, store, components: { App }, template: '<App/>' }) 到此这篇关于Vuex总体案例详解的文章就介绍到这了,更多相关Vuex总体内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论