Vuex中actions的使用教程详解

作者:IT利刃出鞘 时间:2024-04-30 08:45:29 

简介

说明

本文用示例介绍Vuex的五大核心之一:actions。

官网

Action | Vuex

API 参考 | Vuex

actions概述

说明

Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。

特点

1.异步操作,通过mutations来改变state。

2.不能直接改变state里的数据。

3.包含多个事件回调函数的对象。

4.执行方式:通过执行 commit()来触发 mutation 的调用, 间接更新 state

5.触发方式: 组件中: $store.dispatch(‘action 名称’, data1)

6.可以包含异步代码(例如:定时器, 请求后端接口)。

用法

直接使用

this.$store.dispatch('actions方法名', 具体值)        // 不分模块
this.$store.dispatch('模块名/actions方法名', 具体值) // 分模块

mapActions

import { mapActions } from 'vuex'
export default {
   computed: {
       // 不分模块
       ...mapActions(['actions方法名'])          

// 分模块,不改方法名
       ...mapActions('模块名', ['actions方法名'])

// 分模块,不改方法名
       ...mapActions('模块名',{'新actions方法名': '旧actions方法名'})
   }
}

示例

CounterStore.js

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);
const counterStore = new Vuex.Store(
   {
       state: {
           count: 10
       },

getters: {
           doubleCount(state) {
               return state.count * 2;
           }
       },

mutations: {
           increment(state) {
               state.count++;
           },
           decrement(state) {
               state.count--;
           },
           // 带参数
           addNumber(state, param1) {
               state.count += param1;
           },
       },

actions: {
           asyncIncrement(context) {
               console.log('CounterStore=> action: asyncIncrement');
               setTimeout(() => {context.commit('increment')}, 1000)
           },

asyncAddNumber(context, n) {
               console.log('CounterStore=> action: asyncAddNumber');
               setTimeout(() => {context.commit('addNumber', n)}, 1000)
           }
       }
   }
);

export default counterStore;

Parent.vue(入口组件)

<template>
 <div class="outer">
   <h3>父组件</h3>
   <component-a></component-a>
   <component-b></component-b>
 </div>
</template>

<script>
import ComponentA from "./ComponentA";
import ComponentB from "./ComponentB";

export default {
 name: 'Parent',
 components: {ComponentA, ComponentB},
}
</script>

<style scoped>
.outer {
 margin: 20px;
 border: 2px solid red;
 padding: 20px;
}
</style>

ComponentA.vue(异步修改vuex的数据) 

<template>
 <div class="container">
   <h3>ComponentA</h3>
   <button @click="thisAsyncIncrement">异步加1</button>
   <button @click="thisAsyncAddNumber">异步增加指定的数</button>
 </div>
</template>

<script>
export default {
 data() {
   return {
     cnt: 5
   }
 },
 methods:{
   thisAsyncIncrement() {
     this.$store.dispatch('asyncIncrement')
   },
   thisAsyncAddNumber() {
     this.$store.dispatch('asyncAddNumber', this.cnt)
   }
 }
}
</script>

<style scoped>
.container {
 margin: 20px;
 border: 2px solid blue;
 padding: 20px;
}
</style>

ComponentB.vue(读取vuex的数据) 

<template>
 <div class="container">
   <h3>ComponentB</h3>
   <div>计数器的值:{{thisCount}}</div>
   <div>计数器的2倍:{{thisDoubleCount}}</div>
 </div>
</template>

<script>
export default {
 computed:{
   thisCount() {
     return this.$store.state.count;
   },
   thisDoubleCount() {
     return this.$store.getters.doubleCount;
   },
 }
}
</script>

<style scoped>
.container {
 margin: 20px;
 border: 2px solid blue;
 padding: 20px;
}
</style>

路由(router/index.js)

import Vue from 'vue'
import Router from 'vue-router'
import Parent from "../components/Parent";

Vue.use(Router)

export default new Router({
 routes: [
   {
     path: '/parent',
     name: 'Parent',
     component: Parent,
   }
 ],
})

测试

访问: http://localhost:8080/#/parent

Vuex中actions的使用教程详解

来源:https://blog.csdn.net/feiying0canglang/article/details/122725144

标签:Vuex,actions
0
投稿

猜你喜欢

  • SQL SERVER触发器详解

    2024-01-22 01:50:00
  • Python实现快速傅里叶变换的方法(FFT)

    2022-09-18 07:21:47
  • Pytorch mask_select 函数的用法详解

    2023-11-20 22:01:40
  • Python利用pynput实现划词复制功能

    2022-03-28 23:14:23
  • 仅IE9/10同时支持script元素的onload和onreadystatechange事件分析

    2024-04-16 09:27:54
  • 利用Python实现面部识别的方法详解

    2021-02-08 05:00:57
  • Python中安装库的常用方法介绍

    2022-04-03 08:13:17
  • SQL里类似SPLIT的分割字符串函数

    2024-01-23 07:59:57
  • Python爬虫运用正则表达式的方法和优缺点

    2023-04-03 22:09:21
  • Python列表删除重复元素与图像相似度判断及删除实例代码

    2021-02-21 05:28:58
  • 在PyCharm的 Terminal(终端)切换Python版本的方法

    2021-10-31 08:37:07
  • Python3.7 新特性之dataclass装饰器

    2021-05-11 13:13:40
  • Python-OpenCV实现图像缺陷检测的实例

    2023-02-16 19:38:46
  • 详解MySql中InnoDB存储引擎中的各种锁

    2024-01-13 10:40:32
  • 在ASP中按指定参数格式化显示时间的函数。

    2010-05-27 12:29:00
  • Python类的用法实例浅析

    2023-07-31 11:17:18
  • python将字符串list写入excel和txt的实例

    2022-02-28 05:07:01
  • Scrapy抓取京东商品、豆瓣电影及代码分享

    2022-03-23 18:44:47
  • Centos7下编译安装配置Nginx+PHP+MySql环境

    2023-11-14 19:10:06
  • 详解PyQt5 事件处理机制

    2023-04-06 00:09:34
  • asp之家 网络编程 m.aspxhome.com