位置: 编程技术 - 正文

深入理解vuex2.0 之 modules(深入理解计算机系统 电子书)

编辑:rootadmin

推荐整理分享深入理解vuex2.0 之 modules(深入理解计算机系统 电子书),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入理解新发展理念,推进供给侧结构性改革,深入理解新发展理念,推进供给侧结构性改革,深入理解中国式现代化论文,深入理解中国式现代化论文,深入理解计算机系统,深入理解新发展理念,推进供给侧结构性改革,深入理解计算机系统,深入理解计算机系统,内容如对您有帮助,希望把文章链接给更多的朋友!

什么是module?

背景:在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对象,store对象也将对变得非常大,难于管理。

module:可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

怎么用module?

一般结构

模块内部的数据:①内部state,模块内部的state是局部的,也就是模块私有的,比如是car.js模块state中的list数据,我们要通过this.$store.state.car.list获取;②内部getter、mutation和action,仍然注册在全局命名空间内,这是为了多模块可以同时响应同一mutation;this.$store.state.car.carGetter的结结果是undefined,而通过this.$store.state.carGetter则可以拿到。

传参:getters====({state(局部状态),getters(全局getters对象),roosState(根状态)});actions====({state(局部状态),commit,roosState(根状态)}).

新建一个项目体验一下,通过vue ?cli新建一个项目vuemodule, 不要忘记安装vuex.

1, 在src 目录下新一个login文件夹,在里面新建index.js 用于存放login 模块的状态。 为了简单起见,我把模块下的state, actions,mutations, getters 全放在index.js文件中。

先简单给它增加一个状态,userName: “sam”

2,在src 目录下,再新建一个 store.js 这是根store, 它通过modules 属性引入 login模块。

3, 在main.js中引入store, 并注入到vue 根实例中。

4,在 app.vue 中通过computed属性获取到login下的state. 这里要注意,在没有modules 的情况下,组件中通过 this.$store.state.属性名 可以获取到,但是有modules 之后,state 被限制到login 的命名空间(模块)下,所以属性名前面必须加模块名(命名空间),组件中通过 this.$store.state.模块名.属性名,在这里是 this.$store.state.login.userName

深入理解vuex2.0 之 modules(深入理解计算机系统 电子书)

组件中成功获取到状态。项目目录和展示如下

4 ,通过actions, mutations 改变名字, 这就涉及到dispatch action, commit mutations, mutations 改变state.

先在login 文件夹 index.js中添加changeName action 和 CHANGE_NAME mutations.

在app.vue 中添加一个按钮:<button> change to json</button>, 点击时,dispatch 一个 action. 那在组件中怎么dispatch actions 呢?

在模块中,state 是被限制到模块的命名空间下,需要命名空间才能访问。 但actions 和mutations, 其实还有 getters 却没有被限制,在默认情况下,它们是注册到全局命名空间下的,所谓的注册到全局命名空间下,其实就是我们访问它们的方式和原来没有module 的时候是一样的。比如没有module 的时候,this.$store.dispatch(“actions”), 现在有了modules, actions 也写在了module 下面(changeName 写到了login目录下的index.js中),我们仍然可以这么写,this.$store.dispatch(“changeName”), 组件中的getters, 也是通过 this.$store.getters.module中getters 来获取。

5, 局部参数

虽然dispatch action和 commit mutations 可以全局使用,但是写在module 中的actions, mutations 和getters, 它们获得的默认参数却不是全局的,都是局部的,被限定在它们所在的模块中的。比如mutations和getters 会获得state 作为第一个默认参数,这个state参数,就是限定在mutations 和getters 所在模块的state对象,login 文件夹下的mutations 和getters 只会获取到当前index.js 中的 state 作为参数 。 actions 会获得一个context 对象作为参数,这个context 对象就是当前module 的实例,module 相当于一个小store.

那么怎样才能获取到根store 中的state 和 getters 呢? Vuex 提供了 rootState, rootGetters 作为module 中 getters 中默认参数, actions中context 对象,也会多了两个属性,context.getters, context. rootState, 这些全局的默认参数,都排在局部参数的后面。

我们在store.js中添加 state, getters:

login 目录下的 index.js

app.vue 增加h2 展示 loacaJobTitle, 这个同时证明了getters 也是被注册到全局中的。

6, 其实actions, mutations, getters, 也可以限定在当前模块的命名空间中。只要给我们的模块加一个namespaced 属性:

当所有的actions, mutations, getters 都被限定到模块的命名空间下,我们dispatch actions, commit mutations 都需要用到命名空间。如 dispacth("changeName"), 就要变成 dispatch("login/changeName"); getters.localJobTitle 就要变成 getters["login/localJobTitle"]

app.vue 如下:

有了命名空间之后,mapState, mapGetters, mapActions 函数也都有了一个参数,用于限定命名空间,每二个参数对象或数组中的属性,都映射到了当前命名空间中。

标签: 深入理解计算机系统 电子书

本文链接地址:https://www.jiuchutong.com/biancheng/377403.html 转载请保留说明!

上一篇:AngularJS实现自定义指令及指令配置项的方法(angular script)

下一篇:详解Vue2 SSR 缓存 Api 数据(vue缓存数据)

  • 小规模忘了报税怎么办
  • 税金及附加怎么来的
  • 增值税专用发票丢失了要怎么处理
  • 外国常驻代表机构办理税务登记
  • 个人所得税报税孩子的夫妻双方都报吗
  • 三证合一后税务登记证要收回吗
  • 个税上个月没报下个月累计会怎么样
  • 自然人转让股权给自己的公司
  • 损失补偿原则的限制条件有
  • 企业想成为退税商店需具备哪些条件
  • 住房公积金的会计处理
  • 三包范围内的维修费谁出
  • 出售旧固定资产的税率是多少
  • 计提工会经费是按应付职工薪酬的借方还是贷方
  • 非独立核算不用做核算吗
  • 为什么有的公司没有一金
  • 超过180天增票不抵扣财务还可以入账吗?
  • 增资扩股投资方要交印花税吗
  • 购货方申请红字发票怎么申报
  • 企业向员工集资利息标准
  • 企业所得税看哪里
  • 诉讼费和保全费什么时候能退还
  • 新办企业的开办费用应计入( )
  • 小规模企业企业所得税优惠政策2022年
  • 小规模需要交所得税吗
  • 交易性金融资产的交易费用计入哪里
  • 企业当年实现的净利润
  • 桌面右键个性化没有关联的程序
  • 经营租入的设备计入什么科目
  • 股票的交易费用是怎么算的
  • igfxext.exe
  • 公司的清洁费用是什么科目
  • 新买的笔记本电脑需要装系统吗
  • 直接计入当期利润的利得和损失有哪些
  • 金银首饰零售业必须为一般纳税人吗
  • 土地开发公司是国企吗
  • php不使用内置函数的情况下,输出数组中重复最多的元素
  • php 返回
  • 小规模纳税人季度不超30万免增值税
  • 公司有收入可不交社保吗
  • 应纳税所得额100-300万税率
  • 原始凭证必要时可以涂改
  • 公司租赁个人车辆账务处理
  • 应收账款周转天数减少说明什么
  • 应收票据到期后账务处理
  • 小规模季度等于几个月
  • 残保金属期是当年还是上年
  • 增值税不得抵扣的情形
  • sql多条记录取一条
  • 计提地税会计分录怎么做
  • 委托加工环节应税消费品应纳税额的计算
  • 债务重组与资产重组
  • 电子发票能否作废
  • 享受优惠政策的通知
  • 电子承兑汇票是24小时签收吗
  • 长期待摊销费用属于流动资产吗
  • 会计基本前提包括会计主体货币计量资料完整和经济效益
  • 新增注册资金
  • win8 系统设置
  • mac电脑如何下载app
  • window10节电模式怎么关闭
  • windows注册账号
  • 安装网络设备
  • win7安装cad2010
  • win8右边栏设置
  • WIN10系统崩溃如何自救?
  • windows8.1控制面板
  • 安卓笔记软件squid使用方法
  • django实现登录注册功能
  • android中的短信联系人管理,浏览器属于
  • activitythread main方法
  • node.js app
  • unity数据结构和算法
  • android事件响应和处理机制
  • 主机端口扫描程序设计python
  • unity或者
  • python for循环删除元素
  • js对象用法
  • 贴现再贴现转贴现的联系
  • 小规模纳税人每季度不超过30万免税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设