首页 > 其他分享 >vuex核心概念---action、getter、module

vuex核心概念---action、getter、module

时间:2024-07-28 14:40:33浏览次数:9  
标签:obj module --- item state getter 模块 action vuex

在vuex中还有其他三个概念,分别是action、getter、moduler,其实这三个概念多多少少大大小小都大同小异,接下来分别解释。

1. action

前面提到在mutation是用作同步传递数据的,那么异步用谁呢?答案是action。为了方便devtools打个快照存下来,方便管理维护。所以说这个只是规范,而不是逻辑的不允许,只是为了让这个工具能够追踪数据变化而已。
定义action

mutations: {
  changeCount (state, newCount) {
    state.count = newCount
  }
}


actions: {
  setAsyncCount (context, num) {
    // 一秒后, 给一个数, 去修改 num
    setTimeout(() => {
      context.commit('changeCount', num)
    }, 1000)
  }
},

调用action两种方法

  1. 组件中通过dispatch调用
setAsyncCount () {
  this.$store.dispatch('setAsyncCount', 666)
}
  1. 辅助函数 -mapActions映射调用
import { mapActions } from 'vuex'
methods: {
   ...mapActions(['changeCountAction'])
   bntClick(){
   this.setAsyncCount()
   }
}

//mapActions映射的代码 本质上是以下代码的写法
//methods: {
//  changeCountAction (n) {
//    this.$store.dispatch('changeCountAction', n)
//  },
//}

image

2. getter

类似于vue中的computed,进行缓存,对于Store中的数据进行加工处理形成新的数据
具体操作类似于前几种,这里不做具体说明

3. modules

modules就是模块,这里指的是vuex的模块,当项目太大时inde.js的各个核心就会太过臃肿,这时我们可以采用moudules分成一个一个小的模块
image
默认情况下,模块内部的 action 和 mutation 仍然是注册在全局命名空间的——这样使得多个模块能够对同一个 action 或 mutation 作出响应。

如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块。当模块被注册后,它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名。

import axios from 'axios'
export default {
  namespaced: true,
  state () {
    return {
      list: []
    }
  },
  mutations: {
    updataList (state, payload) {
      state.list = payload
    },
    updatanewCount (state, obj) {
      const goods = state.list.find(item => item.id === obj.id)
      goods.count = obj.newCount
    }
  },
  actions: {
    async getdata (ctx) {
      const res = await axios.get('http://localhost:3000/cart')
      ctx.commit('updataList', res.data)
    },
    async updataCountAction (ctx, obj) {
      await axios.patch(`http://localhost:3000/cart/${obj.id}`, {
        count: obj.newCount
      })
      ctx.commit('updatanewCount', {
        id: obj.id,
        newCount: obj.newCount
      })
    }
  },
  getters: {
    totalCount (state) {
      return state.list.reduce((sum, item) => sum + item.count, 0)
    },
    totalPrice (state) {
      return state.list.reduce((sum, item) => sum + item.count * item.price, 0)
    }

  }
}

import { mapState } from 'vuex'
import { mapGetters } from 'vuex'
export default {

  name: 'App',
  created () {
    this.$store.dispatch('cart/getdata')
  },
  computed: {
    ...mapState('cart', ['list'])
	...mapGetters('cart', ['totalCount', 'totalPrice'])
  },
  components: {
    CartHeader,
    CartFooter,
    CartItem
  }
}

总结

image

标签:obj,module,---,item,state,getter,模块,action,vuex
From: https://www.cnblogs.com/backeast/p/18328211

相关文章

  • JAVA 实现 - 哈希表
    哈希算法String.hashCodepublicstaticvoidmain(String[]args){Stringstr1="abc";Stringstr2="bca";inthash=0;for(inti=0;i<str2.length();i++){charc=str1.charAt(i);System.out.pr......
  • 洛谷题单指南-前缀和差分与离散化-P1496 火烧赤壁
    原题链接:https://www.luogu.com.cn/problem/P1496题意解读:给定n个区间[a,b),计算所有区间覆盖的总长度。解题思路:方法1、离散化先思考一种比较直观的思路:既然要计算多个区间覆盖的总长度,可以枚举每一个区间[a,b),通过一个桶数组来标记区间中所有的点f[x]=1,最终统计所有为1的......
  • SSL 证书验证失败 - 雅虎财经 API - Python
    我正在尝试从雅虎财经获取数据,但收到SSL错误。代码如下:importrequestsresponse=requests.get("https://query1.finance.yahoo.com/v8/finance/chart/META",verify=True)print(response.status_code)出现以下错误:urllib3.exceptions.SSLError:[SSL:CERTIFICATE_......
  • Redis变慢的原因及排查方法-系统方面
    原因1:实例内存达到上限1)排查思路如果Redis实例设置了内存上限maxmemory,那么也有可能导致Redis变慢。当把Redis当做缓存使用时,通常会给这个实例设置一个内存上限maxmemory,然后设置一个数据淘汰策略。而当实例的内存达到了maxmemory后,可能会发现,在此之后每次写入新数据......
  • MySQL基础练习题9-平均售价
    题目·:查找每种产品的平均售价。average_price 应该 四舍五入到小数点后两位。准备数据​分析数据第一步:用左连接连接两张表​第二步:留下符合日期第三步:算平均售价第四步:排除那些售卖为0的这种情况总结:题目:查找每种产品的平均售价。average_price 应该 四舍五入到......
  • Java----CAS算法与AtomicInteger源码解读
    CAS介绍:为了确保对数据操作的原子性,在java.util.concurrent.atomic下定义许多关于各种基本类型数据的提供原子操作的类。这里我们以AtomicInteger为例子。AtomicInteger的本质:自旋锁+CAS算法CAS的全称是:CompareAndSwap(比较再交换);是现代CPU广泛支持的一种对内存中的......
  • 襄阳-----邓州市
    襄阳到邓县有多少公里  我来答 分享 举报 1个回答#热议# 发烧为什么不能用酒精擦身体来退烧?匿名用户推荐于2020-12-15  本数据来源于百度地图,最终结果以百度地图最新数据为准。  驾车路线:全程约81.5公里起点:襄阳区1.襄阳市内驾车方案1)......
  • 20、flask-进阶-自定义静态文件static和模板文件templates的路径配置
    自定义static目录和templates目录的路径原本flask默认的static和templates目录是在App目录下的:如下图如果想把这两个目录更改位置,如放在根目录下:代码如下:__init__.pyfromflaskimportFlaskfrom.viewsimportbluefrom.extsimportinit_extsimportos#获......
  • 七天.NET 8操作SQLite入门到实战 - 第七天Blazor学生管理页面编写和接口对接(3)
    前言本章节我们的主要内容是完善Blazor学生管理页面的编写和接口对接。七天.NET8操作SQLite入门到实战详细教程第一天SQLite简介第二天在Windows上配置SQLite环境第三天SQLite快速入门第四天EasySQLite前后端项目框架搭建第五天引入SQLite-netORM并封装......
  • 开车从襄阳到邓州多远,费用多少钱以及详细线路(返程) 时间:2024-07-27 23:40:58
    开车从襄阳到邓州多远,费用多少钱以及详细线路(返程)时间:2024-07-2723:40:58  编辑:无敌电动网自驾开车从襄阳到邓州的距离大约84.7公里,总耗时约1.6小时,路桥费大约需要30元,如果您开的是汽油车,油费大概51元,如果您开的是新能源车,电费大概在8元~ 17元之间,电费高低取决于您充电......