vue vuex模块化

news/2024/7/24 7:14:15 标签: html, es6, 前端

简单介绍

state

//store.js
//存放数据
  state: {
    index:'index in root store'
  },
//组件内获取方式
  computed: {
    // 可以结合computed 使用
    index(){
      return this.$store.state.index
    }
  }

mutations

mutations两个参数 第一个是默认参数state 第二个是传参payload,这里有一个异步同步的概念,一般我们在actions里面执行异步操作,在mutations里面(执行同步)操作state的状态改变(即修改state里面的数据)

//store.js
 SET_COUNTA_ADD(state, payload) {
   state.countA += payload;
 },
 //触发方式
store.commit('SET_COUNTA_ADD',5)

actions

Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
context.commit 提交一个 mutation,或者通过 context.state 和 context.getters来获取 state 和 getters。

//store.js
//可以使用用解构方式
 reduceCountAsync({ commit,getters,state,dispath }, payload) {
    setTimeout(() => {
      commit("SET_COUNTA_REDUCE", payload);
    }, 1000);
  },
//触发方式
store.dispatch('reduceCountAsync',5)

getters
getters 的作用是 有时候我们需要从 store 中的 state 中派生出一些状态,Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性),如果只需要state里面的状态,可以直接获取没必要定义一个getters

//store.js
getters: {
  doneTodos: state => {
    return state.todos.filter(todo => todo.done)
  }
}
store.getters.doneTodos 

语法糖

vuex提供了一些辅助函数,即快捷方式方便我们操作state

// getter
this.$store.getters['reduceTimes']; 
...mapGetters({ //语法糖
  reduceTimes: 'reduceTimes'
})
// mutataions 
this.$store.commit('checkIndex',{name;'kk'})
...mapMutations({ //语法糖
 checkIndex:'checkIndex',
//SET_COUNTA_ADD:'modulesA/SET_COUNTA_ADD',
}),

//actions
this.$store.dispatch('addCountAAsync',{step:5})
...mapActions({
	addCountAAsync:'addCountAAsync'
})
//或者
...mapActions(['addCountAAsync'])

//state
this.$store.state.count
...mapState({
	count:state => state.count
})

模块化

  1. 目录结构
    modulesB 是将actions mutations getters state 细化出去,这点不用多说
    在这里插入图片描述

注意:可以通过添加namespaced: true使其成为带命名空间的模块。当模块被注册后,它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名。

//  store/index.js
import modulesA from './modules/modulesA'
import modulesB from './modules/modulesB/index'
modules: {
  modulesA,modulesB
}
// modulesB
import action from './action'
import mutation from './mutation'
import state from './state'
import getter from './getter'
const modulesB = {
  namespaced: true,
  state: state,
  mutations: mutation,
  actions: action,
  getters: getter
}
export default modulesB 
  1. 模块化下的参数变化
    在actions mutations中,context对象 与 state 变为模块化下 的context对象与state
    context 对象变为
    在这里插入图片描述
// mutations context对象 变为模块化下的state
  mutations: {
    SET_COUNTA_ADD(state, payload) {
      console.log(state);
      state.countA += payload;
    }
 }
//actions
 actions: {
    addCountAAsync({commit,dispatch,getters,rootGetters,rootState}, payload) {
      setTimeout(() => {
        commit("SET_COUNTA_ADD", payload);
      }, 1000);
    }
 }
  1. 模块化下的辅助函数
// getter
this.$store.getters['modulesA/countA']; 

...mapGetters({
  bGetter2: 'modulesA/countA'
})

// mutation 
this.$store.commit('modulesA/SET_COUNTA_ADD', {
  name: 'QQ'
});

...mapMutations({
  setBname: 'modulesA/SET_COUNTA_ADD'
}),

// action
this.$store.dispatch('modulesA/addCountAAsync', { name: "kk" });

...mapActions({
  aSetAge: 'modulesA/addCountAAsync',
}),
  1. 使用 createNamespacedHelpers 创建基于某个命名空间辅助函数
import { createNamespacedHelpers } from 'vuex'
const { mapState, mapActions } = createNamespacedHelpers('modulesA') // moduleName
//像模块化之前一样写
...mapState({
  countA: state => state.countA,
}),
  1. actions 注册为全局
globalAction: {
  root: true,
  globalCount({ commit }, payload) {
      setTimeout(() => {
          commit('SET_COUNTA_ADD', payload.name);
      }, 1000)
  }
}

http://www.niftyadmin.cn/n/1852469.html

相关文章

vue WebWorker的使用

webworker 我们知道javascript是单线程,当主线程遇到大量计算或者复杂的业务逻辑时,会对我们的页面造成不好的用户体验。 webworker 很好的解决了这个问题,我们可以在主线程开启一个worker线程执行任务而不干扰用户界面(主线程&a…

SE100101系统概述

目录课程说明.................................................................................................................................. 1<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />课程介绍.............…

CSS 常见的兼容性问题

1.浏览器私有前缀 五大浏览器内核 1.Gecko内核 -moz- 火狐浏览器 2.Webkit -webkit- 谷歌内核 safari 买去 3.Trident -ms- IE内核 4.Presto内核 -o- 只有opera 采用 5.blink内核 -webkit- 谷歌采用标准写法 -moz-animation: ; -o-animation: ; -webkit-animation: ;…

潘石屹能否拯救中国楼市?

潘石屹能否拯救中国楼市&#xff1f; 时寒冰在楼市成交低迷&#xff0c;大调整渐渐逼近之时&#xff0c;在一个月黑风高之夜&#xff0c;一个瘦弱的汉子壮烈地高呼&#xff1a;“我不涨价谁涨价&#xff01;” 北京震动了&#xff0c;神州大地震动了&#xff0c;整个世界…

CSS3新特性总结

CSS3选择器 border-radius圆角边框 // 两个参数 8个值 border-radius:10px 20px 30px 40px / 10px 20px 30px 40px //左上角开始 border-radius:10px 20px //对角线 // 两个参数 8个值 border-radius:5%; border-radius:50%; shadow 阴影 盒子阴影 //一参&#xff1a;横向…

CSS 基本知识点梳理

1.介绍下CSS的盒子模型&#xff1f; 通过box-sizing设置 box-sizing:context-box 标准盒子模型&#xff1a;宽度内容的宽度&#xff08;content&#xff09; border padding margin box-sizing:border-box 怪异盒模型&#xff1a;宽度内容宽度&#xff08;contentborderpadd…

从设计原则谈软件开发(三)

今天被一个女生拒绝了&#xff0c;大受打击。来这继续把这个系列写下去。 之前写过了OCP&#xff08;开放封闭原则&#xff09;&#xff0c;SRP(单一职责原则)。今天的东西就稍微简单一些了。 先来说LSP&#xff0c;他的具体翻译我记不住了&#xff0c;他的内容是子类必须可以替…

JS 模块化规范

JS 模块化 什么是模块化&#xff1f; 将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起 模块化的好处 1.提高复用性 2.高可维护 3.更好的分离&#xff0c;按需加载 4.避免命名冲突模块化的缺点 1.增加请求 2.依赖过多 3.难以维护CommonJS 说明…