Vuex(二)

简介: Vuex是一个专为vue.js应用程序开发的状态管理模式。他采用集中式存储来管理应用程序中所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex也集成到了vue的官网调试工具vue-devtools中,提供了诸如零配置的time-travel调试、状态快照导入导出等高级调试功能

Vuex是一个专为vue.js应用程序开发的状态管理模式。他采用集中式存储来管理应用程序中所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex也集成到了vue的官网调试工具vue-devtools中,提供了诸如零配置的time-travel调试、状态快照导入导出等高级调试功能

mutation

在使用store.commit方法提交mutation时,还可以传入额外的参数,即mutation的载荷(payload)

代码如下:

mutations: {
        increment(state,n) {
            state.count+=n
        }
    }
    store.commit("increment",10)

载荷也可以是一个对象。

代码如下·:

mutations: {
        increment(state,payload) {
            state.count+=payload.amount
        }
    }
    store.commit("increment",{
        amount:10
    })

提交mutation时,也可以使用包含type属性的对象,这样传一个参数就可以了

代码如下:

mutations: {
        increment(state,payload) {
            state.count+=payload.amount
        }
    }
store.commit({
    type:'increment',
    amount:10
})

在组件中提交mutation时可以使用mapMutation辅助函数将组件中的方法映射为store.commit调用

代码如下:

import { mapMutations } from 'vuex'
export default {
  name: 'App',
  data() {
    return {}
  },
methods:mapMutations([
  'increment'
])
}

increment映射为this.$store.commit('increment')

除了使用字符串数组外,mapMutation函数的参数也可以是一个对象

代码如下:

import { mapMutations } from 'vuex'
export default {
  name: 'App',
  data() {
    return {}
  },
methods:mapMutations({
 add: 'increment'
})
}

大多数情况下,组件还有自己的方法,在这种情况下,可以使用es6的展开运算符提取mapMutation函数返回的对象属性

代码如下:

import { mapMutations } from 'vuex'
export default {
  name: 'App',
  data() {
    return {}
  },
methods:{
  ...mapMutations({
 add: 'increment'
})
}}

mapState

当一个组件需要使用多个store状态属性时,将这些状态都声明为计算属性就会有些重复和冗余。为了解决这个问题,可以使用mapState辅助函数帮助我们生成计算属性

代码如下:

在store中定义两个状态

const store = new Vuex.Store({
    state: {
        count: 0,
        message: 'hgk'
    }
})

在组件中使用mapState辅助函数生成计算属性

import { mapState } from 'vuex'
export default {
  name: 'App',
  data() {
    return {
      mag: '',
      count: ''
    }
  },
  computed: mapState({
    count: 'count',
    msg: 'message'
  })
}

注意 count: 'count', msg: 'message' 冒号前面的是计算属性的名字,冒号后面是store中状态属性的名字,以字符串形式给出

如果计算属性的名字和store中状态属性的名字相同,那么还可以进一步简化,直接给mapState函数传递一个字符串数组既可

代码如下:

computed: mapState([
   'count',
   'message'
   ]
  )

count : 映射'this.count为store.state.count

message : 映射'this.message为store.state.message

mapState函数返回的也可以是一个对象,可以使用展开运算符将他和组件的本地计算属性结合一起使用

代码如下:

computed:{
  localComputed(){
    ...mapState({
    })
  }
 }


目录
相关文章
|
SQL Oracle 关系型数据库
Oracle-index索引解读
Oracle-index索引解读
463 0
|
10月前
|
运维 Ubuntu 安全
阿里云OS Copilot智能助手深度评测报告:一位系统管理员的真实体验
### 阿里云OS Copilot智能助手深度评测报告:系统管理员的真实体验 作为一名负责30+台跨平台服务器的系统管理员,我在部署新集群时首次深度体验了OS Copilot。通过多系统部署、核心功能测试及效能分析,发现其在自动化运维方面表现出色,特别是在故障诊断和批量配置上效率大幅提升。但也提出了一些改进建议,如增强安全机制和提供REST API接口。总体而言,OS Copilot已从“智能助手”进化为“运维副驾驶”,建议运维团队结合CI/CD管道进行深度集成。
479 0
|
10月前
|
负载均衡 物联网 测试技术
部署硬件负载均衡时,如何评估设备的处理能力?
部署硬件负载均衡时,如何评估设备的处理能力?
609 130
第三章:什么是 BACnet/IP 网络
BACnet/IP 网络是一个或多个 IP 子网(IP 域)的集合,这些子网分配有单个 BACnet 网络号。BACnet 互联网络由两个或多个 BACnet 网络组成。这些网络可能是 BACnet/IP 网络,也可能使用其他指定的技术。此标准还支持以类似于 IP 子网的方式包含 IP 多播组,如下文中所述。
803 0
第三章:什么是 BACnet/IP 网络
|
NoSQL 算法 Java
诡异,Redis Proxy RT上升后连接倾斜
本文细致地描述了关于Redis Proxy RT上升后连接倾斜问题的排查过程和根本原因,最后给出了优化方案。
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
578 1
|
存储 移动开发 前端开发
使用HTML5和CSS3构建现代网页:技术详解与实践
【5月更文挑战第28天】本文详细介绍了使用HTML5和CSS3构建现代网页的技术与实践。HTML5新增语义化标签、多媒体支持、本地存储和表单验证等功能,提升了网页开发效率和用户体验。CSS3则带来了更多选择器、盒模型改进、背景与边框样式以及动画过渡效果,使网页设计更具视觉冲击力。通过实例展示了如何结合两者创建结构清晰、交互丰富、响应式的现代网页。
|
JavaScript 前端开发
ExtJs日期控件案例(可控制时间的选择)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingfeng812/article/details/21004191 ...
1064 0
|
人工智能 城市大脑 运维
阿里云官网政企业务频道上线!
阿里云官网政企业务频道上线!
440 0
|
缓存 NoSQL Java
Redis7的10大应用场景和案例解析
你在项目中使用 Redis 实现了什么应用场景,欢迎一起跟 V 哥讨论。同时也做个小调查,朋多少兄弟是需要了解 Redis 核心源码的,人多的话,下一篇 V 哥写 Redis7的源码分析,人少的话就算了,感谢。
411 0