当前位置: 首页 > news >正文

Vuex3学习笔记

文章目录

  • 1,入门案例
    • 辅助函数
  • 2,mutations传参
    • 辅助函数
  • 3,actions
    • 辅助函数
  • 4,getters
    • 辅助函数
  • 5,模块拆分
  • 6,访问子模块的state
    • 辅助函数
  • 7,访问子模块的getters
    • 辅助函数
  • 8,访问子模块的mutations
    • 辅助函数
  • 9,访问子模块的actions
    • 辅助函数

1,入门案例

安装库。

npm install vuex@3

新建store.js。

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {count: 0},mutations: {increment(state) {state.count++}}
})export default store

main.js。

new Vue({render: h => h(App),store
}).$mount('#app')

最后,计数器案例。

<template><h1 @click="add">{{ $store.state.count }}</h1>
</template><script>
export default {name: 'App',methods: {add() {this.$store.commit('increment')}}
}
</script>

效果:

在这里插入图片描述

辅助函数

可以将数据自动变成计算属性。

<template><h1 @click="add">{{ count }}</h1>
</template><script>
import { mapState } from "vuex";
export default {name: 'App',methods: {add() {this.$store.commit('increment')}},computed: {...mapState(['count'])}
}
</script>

2,mutations传参

跟着后面写就行,只能传一个参数。

const store = new Vuex.Store({state: {count: 0},mutations: {increment(state, v) {state.count += v}}
})this.$store.commit('increment', 5)

辅助函数

可以将mutations自动变成方法。

<template><h1 @click="increment(5)">{{ count }}</h1>
</template><script>
import { mapState, mapMutations } from "vuex";
export default {name: 'App',methods: {...mapMutations(['increment'])},computed: {...mapState(['count'])}
}
</script>

3,actions

异步操作数据。

const store = new Vuex.Store({state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}}
})this.$store.dispatch('incrementAction', 5)

辅助函数

可以将actions自动变成方法。

<template><h1 @click="incrementAction(5)">{{ count }}</h1>
</template><script>
import { mapState, mapMutations, mapActions } from "vuex";
export default {name: 'App',methods: {...mapActions(['incrementAction']),...mapMutations(['increment'])},computed: {...mapState(['count'])}
}
</script>

4,getters

派生状态,类似于计算属性。

const store = new Vuex.Store({state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}},getters: {count1(state) {return state.count + "个"}}
})$store.getters.count1 

辅助函数

可以将getters自动变成计算属性。

<template><h1 @click="incrementAction(5)">{{ count1 }}</h1>
</template><script>
import { mapState, mapMutations, mapActions, mapGetters } from "vuex";
export default {name: 'App',methods: {...mapActions(['incrementAction']),...mapMutations(['increment'])},computed: {...mapState(['count']),...mapGetters(['count1'])}
}
</script>

5,模块拆分

新建a.js。

新增了一个配置项namespaced。

export default {namespaced: true,state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}},getters: {count1(state) {return state.count + "个"}}
}

b.js。

export default {namespaced: true,state: {count: 0},mutations: {increment(state, v) {state.count += v}},actions: {incrementAction(context, v) {setTimeout(() => {context.commit('increment', v)}, 1000)}},getters: {count1(state) {return state.count + "个"}}
}

改写store.js。

const store = new Vuex.Store({modules: {a, b}
})

6,访问子模块的state

$store.state.a.count
$store.state.b.count

辅助函数

<template><div><h1>{{ count }}</h1></div>
</template><script>
import { mapState } from "vuex";
export default {computed: {...mapState('a', ['count'])}
}
</script>

7,访问子模块的getters

$store.getters['a/count1']
$store.getters['b/count1']

辅助函数

用法与前面一致。

8,访问子模块的mutations

this.$store.commit('a/increment', 1)

辅助函数

用法与前面一致。

9,访问子模块的actions

this.$store.dispatch('a/incrementAction', 1)

辅助函数

用法与前面一致。

相关文章:

  • Linux fallocate工具用于预分配或释放文件空间的块
  • 应用解析 | 面向智能网联汽车的产教融合解决方案
  • 代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
  • debian12安装时分区方案
  • 固定数量点云采样算法
  • 物资材料管理系统建设方案(Word)—实际项目方案
  • 【SQLAlChemy】如何定义ORM模型,如何映射到数据库?
  • [vulnhub]Lin.Security主机Linux提权
  • ReactRouter——路由配置、路由跳转、带参跳转、新route配置项
  • 安卓自动化之minicap截图
  • 数据库表中创建字段查询出来却为NULL?
  • C++输入输出与IO流
  • 【启明智显技术分享】sigmastar ssd202d双网口开发板多串口调试说明
  • 进阶篇01——存储引擎
  • [EFI]ASUS Vivobook 16x M1603QA 电脑 Hackintosh 黑苹果efi引导文件
  • 【Amaple教程】5. 插件
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js写一个简单的选项卡
  • js学习笔记
  • Promise初体验
  • Quartz初级教程
  • Redis在Web项目中的应用与实践
  • Shell编程
  • Vue2 SSR 的优化之旅
  • Vue官网教程学习过程中值得记录的一些事情
  • windows-nginx-https-本地配置
  • 闭包--闭包作用之保存(一)
  • 大主子表关联的性能优化方法
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于 Babel 的 npm 包最小化设置
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 回归生活:清理微信公众号
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (备忘)Java Map 遍历
  • (二)正点原子I.MX6ULL u-boot移植
  • (十六)一篇文章学会Java的常用API
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)u-boot-nand.bin的下载
  • (转) ns2/nam与nam实现相关的文件
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net MVC中使用angularJs刷新页面数据列表
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET实现之(自动更新)
  • 。Net下Windows服务程序开发疑惑
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • ??javascript里的变量问题
  • [ C++ ] STL---仿函数与priority_queue
  • [Android] Android ActivityManager
  • [Android实例] 保持屏幕长亮的两种方法 [转]