Vuex状态机的理解和使用

图灵机状态机识别abcd问题的javaScript实现,javascript,简易可视化,可以echart显示状态转移图 使用javaScript实现了一个计算导论作业里面的算法,图灵机识别abcd序列问题,使用echart做了简单的可视化,欢迎大家参考 立即下载

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

以上是官方套话,详情直接看官网。

1.对状态机vuex的理解

  1. 是一种状态管理模式,抽取共享状态
  2. 保证状态是可预测的变化
  3. 单向数据流

vuex
官 方 祖 传 的 单 向 数 据 流 图 。 官方祖传的单向数据流图。 官方祖传的单向数据流图。

2.安装

npm install vuex --save

3.vuex的基础结构

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {},
  mutations: {},
  actions: {},
  getters: {},
  modules: {}
})

在main.js中引入并挂载到实例上即可在组件中访问共享的状态:

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

4.使用方法

挂载之后,在组件内访问方式如下:

  1. 访问共享状态
this.$store.state.STATE_NAME
  1. 提交状态变化
this.$store.commit(MUTATIONS_FUNC, PAYLOAD);
// 参数一:mutations中的提交修改state的方法名
// 参数二:载荷参数
  1. 异步处理并提交修改
this.$store.dispatch(ACTIONS_NAME, PAYLOAD);
// 参数一:actions 中的异步方法名
// 参数二:载荷参数

注:修改state绝对不可直接修改,如果直接修改就违背了***可预测***的特点,可以通过设置 strict: true,此时直接修改state会报错提示。

5.对基础结构的解释

  1. state

    管理所有共享的状态,同时状态存储是响应式的,所以在computed中返回state

  2. actions 异步方法,可返回Promise,也可使用语法糖

    actions中可以包含异步操作。

    不同于mutations,不可以直接commit。actions中提交的是mutation。

    由于actions中的函数提交的是mutations,所以actions的函数接收的参数就是上下store上下文,通过context.commit提交mutation。

    actions: {
      // async await语法糖,不扩展解释
        async add({ commit, dispatch, rootMutations }, payload) {
          commit('gotData', await getData())
        }
      }
    
  3. mutations 只能写同步方法,不可写异步方法!!

    唯一可以修改state的地方就是在mutation中进行修改。在mutation中接收state作为参数。在业务组件中通过commit调用指定的mutation,在调用的同时可以传递载荷参数,通常这个参数是对象(为了提交多个参数)。

    this.$store.commit(MUTATION_NAME, PAYLOAD);
    // 等同
    this.$store.commit({
      type: MUTATION_NAME,
      params1: VALUE,
      params2: VALUE
    })
    // 当使用对象形式提交的时候,整个对象都作为PAYLOAD提交到mutations的方法中
    

    vuex的state是响应式,所以mutation的使用也要和vue一样:

    1. 初始化所需的属性
    2. 新增删除属性需要使用Vue.set/Vue.delete保证属性的响应

    可以将mutations中的事件名称使用常量代替(非必须):使用常量的好处:不易出错,如果出错eslint会提示

    // mutation-types.js
    export const MUTATION_NAME = 'MUTATION_NAME';
    
    // store.js
    import Vuex from 'vuex'
    import { MUTATION_NAME } from './mutation-types'
    
    const store = new Vuex.Store({
      state: {},
      mutations: {
        [MUTATION_NAME] (state) {
          // todo
          // 注意:mutation中必须使用同步,不可使用异步,所有需要用异步处理的部分都需要在actions中
        }
      }
    })
    
  4. getters

    vuex可以在store中派生状态(getters也可以理解为store中的computed,拥有和computed一样的特性,返回值会被缓存)。

    // store.js
    import Vuex from 'vuex'
    import { MUTATION_NAME } from './mutation-types'
    
    const store = new Vuex.Store({
      state: {},
      getters: {
        GETTERS_NAME: state => {
          // todo
        }
      }
    })
    
    <!-- 组件内调用 -->
    <!-- 也可以根据实际情况传参 -->
    this.$store.getters.GETTERS_NAME
    
  5. modules

    为模块化服务,每个模块被模块化后通过modules引入。每个模块都有属于自己的以上的每一部分,包括modules。

    import Vue from 'vue'
    import Vuex from 'vuex'
    // 引入子模块的vuex
    import counter from "./counter";
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      // 模块化
      modules: {
        counter
      },
      // 使用严格模式
      strict: true
    })
    
    
    // module
    export default {
      // 设置独立的命名空间,避免命名冲突!!!!!!
      namespaced: true,
      state: {
        counter: 0
      },
      mutations: {
        // payload是传递进来的参数
        // 此处的state是module内部的state!!!!
        add(state, payload) {
          state.counter++;
          state.counter += payload;
        }
      },
      actions: {
        // 第一个参数是vuex上下文,state是通过上下文暴露出来的
        // payload是传递进来的参数{}
        // 此处时通过解构的形式
        add({ state, commit, dispatch, rootState }, payload) {
          return new Promise((resolve, reject) => {
            setTimeout(() => {
              commit('add', payload)
            }, 1000);
          });
        },
        // 在module的action中提交或者分发全局store中的mutation或action,那么就需要将{root: true},作为第三个参数传递给commit或dispatch!!!!!!!!!!!!!!
        someAction ({ dispatch, commit, getters, rootGetters }) {
          getters.someGetter // -> 'foo/someGetter'/局部
          rootGetters.someGetter // -> 'someGetter'/全局
    
          dispatch('someOtherAction') // -> 'foo/someOtherAction'/局部
          dispatch('someOtherAction', null, { root: true }) // -> 'someOtherAction'/全局
    
          commit('someMutation') // -> 'foo/someMutation'
          commit('someMutation', null, { root: true }) // -> 'someMutation'
        },
      },
      getters: {
        // 此处的state是module内部的state!!!!
        // 直接讲rootState作为参数传递进来(如果有需要)
        doubleCounter(state, rootState) {
          // todo
        }
      }
    }
    

6.模块化以后的vuex如何使用

由于模块化开启了独立的命名空间,这就导致了访问指定的store需要加上命名空间。这就造成了不必要的麻烦。所以要使用vuex提供的辅助函数简化写法:

import { mapState, mapMutations, mapActions, mapGetters } from "vuex";

对于state:

@Component({
  components: {
    children1
  },
  computed: {
    // 通过扩展运算将需要的state,塞到computed中作为计算属性。
    // 数组内名称要和state中的状态名保持一致
    ...mapState(['PARAMS1','PARAMS2','PARAMS3']),
    params() {
      // 不影响自定义的计算属性
    }
  },
})

getters可以看作是store中的计算属性,进一步处理state,返回需要的值。对于getters:

@Component({
  components: {
    children1
  },
  computed: {
    // 数组内的名称要和store的getters中的名称保持一致
    ...mapGetters(['GETTERS_NAME1','GETTERS_NAME2']),
    params() {
      // 不影响自定义的计算属性
    }
  },
})

mutations中的方法相当于methods中的方法:

methods:{
  // 在需要的地方直接调用数组内的名称
 ...mapMutations(['MUTATIONS_NAME1', 'MUTATIONS_NAME2'])
}
// 等同于
methods:{
 	MUTATIONS_NAME1(payLoad){
  	this.$store.commit('MUTATIONS_NAME1',payLoad)
	},
  MUTATIONS_NAME2(payLoad){
  	this.$store.commit('MUTATIONS_NAME2',payLoad)
	}
}

actions中的方法类似mutation,区别在于 不可直接操作state 通过commit调用mutation去执行修改state。且为异步操作。

methods:{
  // 直接通过name去调用action,在action中执行commit动作,从而修改state
  ...mapActions(['ACTIONS_NAME1', 'ACTIONS_NAME2'])
  
  // 等同于
  ACTIONS_NAME1(){
    return this.$store.dispatch('ACTIONS_NAME1')
  }
}

如有不当之处,请指正。

keep learning

隐语第四课:快速上手-SecretFlow的安装和部署 隐语课程,继续学习隐私计算技术 阅读详情

相关推荐

面向网络攻击行为可视化分析系统实现【WebSocket + 可视化】

本系统主要应用于网站运维管理,它解决了网站运维人员排查网络攻击行为复杂且繁琐等问题,提高了运维人员网络安全分析的效率和准确性。

oNew_Lifeo的博客 1620

聊一聊状态机vuex的实现原理

一般常用vue框架的小伙伴,肯定对vuex不陌生,当我们需要在全局共享一些状态和数据时,首选的肯定是使用vuex缓存数据.实际开发中,这种场景也比较常见,不过很多小伙伴用的时候也许会好奇,vuex是如何实现的,是怎么做到可以全局存贮状态的,今天我们就来简单聊聊vuex写的实现原理笔者将vuex的核心原理分为了以下十个模块,大家可以按照顺序或者自己的需求阅读。

weixin_57294298的博客 1300

ROS牛耕法全覆盖规划:从算法原理到清洁机器人实战解析

本文深入解析ROS牛耕法全覆盖规划算法在清洁机器人中的应用,从算法原理到实战优化技巧全面覆盖。详细介绍了地图预处理、区域分解和路径优化等关键步骤,并分享实际案例中的解决方案,帮助开发者提升机器人清扫效率和覆盖率。

weixin_27013291的博客 392

【Vuex】vue状态机详解

使用了mapState方法之后,我们在插值语法直接使用{{msg}}、{{sum}}即可,不需要写成:{{$store.state.msg}}、{{$store.state.sum}},同理mapGetters方法也一样。假设A组件想要拿B组件里面的数据,那就把A组件和B组件的数据放到Vuex中,A组件想要获取B组件数据从vuex中拿,B组件想要获取A组件的数据也从Vuex拿。方法提交该方法给Mutation来执行,Mutation执行完后,将处理完的数据给State,然后State重新渲染数据到页面。

叶子yes的博客 2779

【ADCU详解】PMIC电源管理集成电路详解

自动驾驶域控制器(ADCU)中的电源管理集成电路(PMIC)是高度集成的关键部件,负责为计算核心、传感器等提供高效稳定的多路电源。其核心特点包括:符合车规AEC-Q100标准、支持功能安全ASIL等级、精确的时序控制及强抗干扰能力。PMIC由开关稳压器、LDO、时序控制器、监控保护电路等模块组成,通过分层电源树框架实现电能分配。设计需考虑效率、功率密度、噪声性能等关键维度,底层基于Buck转换器和LDO原理工作。使用中需满足严苛的车规环境要求,并通过静态/动态测试及故障注入测试进行验证,确保系统可靠性和安全

qq_40844444的博客 841

ZYQN7000系列VxWorks驱动开发:VxWorks系统移植

文章目录ZYQN7000驱动开发:VxWorks系统移植1.硬件环境2.编译vsb和vip工程2.1修改设备树文件2.2添加调试打印组件3.选择uboot来启动VxWorks内核4.尝试在开发板上启动内核4.1 拷贝镜像和设备树至SD卡4.2开发板上电4.2.1 uboot成功启动4.2.2 启动VxWorks5.添加shell和cmd组件 ZYQN7000驱动开发:VxWorks系统移植 1.硬件环境 正点原子领航者开发板 2.编译vsb和vip工程 vsb和vip工程的编译过程可以参考之前的文章,htt

明故宫的记忆 5505

Vue3 状态机配置

使用函数定义store时,所有的composition Api都可以使用。

weixin_45137240的博客 739

Win11上从零跑通Carla自动驾驶仿真:保姆级环境配置与避坑指南(Python 3.7+)

本文详细介绍了在Win11系统上从零配置Carla自动驾驶仿真环境的完整流程,包括Python 3.7+环境搭建、依赖安装、常见问题排查及性能优化技巧。通过保姆级教程帮助开发者快速避坑,实现稳定的自动驾驶仿真测试环境部署。

weixin_33488239的博客 420

Vuex 状态机

说明:因为 Vuex 中只能通过 mutations 去修改 state,因此,如果要将 actions 中的数据保存到 state,必须在 actions 中调用 mutation 的方法。mutations 用来设置修改 state 的方法,这些方法都只能是同步方法。里面都是方法,每个方法第一个参数都是state,拿到 state 只能用不能改。“状态”,实际上指的就是数据。state 是自带的,payload 是外部传进来的值。Vuex,是 Vue 官方推出的“状态管理模式”。

XYX8958的博客 1325

QMI8658姿态传感器实战:从校准到自检的完整避坑指南

本文详细解析了QMI8658姿态传感器的校准与自检流程,提供了从硬件环境搭建到高级功能开发的完整避坑指南。通过真实案例揭示电源设计、接口优化、温度补偿等关键细节,帮助开发者提升传感器精度和可靠性,适用于工业级应用场景。

weixin_29184075的博客 455

38.XDMA寄存器详解2-H2C、C2H通道寄存器组剖析

目录 1.上节回顾 2. H2C寄存器剖析 2.1 H2C通道标识寄存器(0x00) 2.2 H2C通道控制寄存器(0x04) 2.3 H2C通道状态寄存器(0x40) 2.4 H2C通道完成描述符数量寄存器(0x48) 2.5 H2C通道对齐寄存器(0x4C) 2.6 H2C通道查询模式回写地址寄存器(0x88、0x8C) 2.7 H2C通道中断掩码寄存器(0x90)​ 2.8 H2C通道性能监视控制寄存器(0xC0) 2.9 H2C通道周期计数性能寄存器(0xC4、0xC8) 2

一个早起的程序员 5205

Vue的状态机和axios的二次封装

在src文件中创建store文件夹创建两个状态机模块。首先在main.js中引入store状态机。在index.js中引入不同的状态机模块。第一步:引入辅助函数从Vuex中。首先在html页面中使用。第一步声明状态机的配置项。第二步创建状态机实例。第三步注册状态机实例。

weixin_55269913的博客 1218

《QGIS快速入门与应用基础》151:批量属性值赋值(字段计算器)

本文介绍了QGIS中字段计算器的批量属性值赋值方法,重点讲解了简单赋值(统一值和递增序列)的操作步骤与表达式应用。文章首先强调数据备份、字段类型确认等必要前提,随后详细解析字段计算器的界面功能分区和打开方式。通过具体场景示例,展示了如何为图层统一赋值固定值或生成连续编号序列,并提供了文本、数字、日期等不同字段类型的表达式模板。文中特别提醒新手优先创建新字段而非直接更新现有字段,以避免数据丢失风险,同时推荐使用$id和rownum()函数实现基础序列生成。该教程适合GIS初学者快速掌握批量属性编辑的核心技能。

LuckyHanMo的博客 487

Vuex状态管理机

Vuex状态管理机1 介绍2 基本使用2.1 state2.2 getters2.3 mutations(突变)2.4 actions(动作)2.5 案例-定义状态机实例3 辅助函数4.模块化开发4.1 模块化目的4.2 模块化使用 1 介绍         Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 &nbsp

谦谦的博客 583

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

前端:从状态管理到有限状态机的思考

点击上方程序员成长指北,回复“1”加入Node进阶交流群1. 状态管理在我们前端开发中,一定会接触现在最热门的几大框架(Vue, React等等),在使用框架的过程中,我们一定会接触某些...

程序员成长指北 432

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

XState是一个状态管理的库

XState是一个状态管理的库,用来描述、控制各种状态。脑海中浮现了Redux和Vuex,他们也是状态管理的库,通过公用上下文去维护数据。和这些库不一样的是,Xstate着重点在于管理状态...

文摘资讯 1040

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Vue常见考点以及容易混淆的知识点----Day06

Vuex 是一个专为 Vue.js 应用程序开发的。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex是一个状态管理模式,状态机,将组件共享的数据放到状态机中统一管理,组件想拿数据可以从自己的数据模型中拿,也可以从仓库中拿,把vuex理解成一个仓库.假设A组件想要那B组件里面的数据把A组件和B组件的数据放到Vuex中 A组件想要获取B组件数据从vuex中拿 B组件想要获取A组件的数据从Vuex拿。

m0_54430913的博客 233

Vuex状态机

state是整个应用的“单一数据源”。在组件中通过或mapState辅助函数访问。特性描述单一状态树整个应用的状态都集中在一个对象中状态不可变状态只能通过 mutation 修改可预测性所有状态变化都有记录和可追踪支持模块化大型项目可通过模块划分管理复杂状态高扩展性支持插件系统(如日志、持久化、热重载)

m0_51429350的博客 458

VUEX状态机简单使用

vuex状态机使用流程

qq_20006765的博客 680

实习打怪之路:Vuex状态机的一些基本属性

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex是一个状态管理模式,状态机,将组件共享的数据放到状态机中统一管理,组件想拿数据可以从自己的数据模型中拿,也可以从仓库中拿,把vuex理解成一个仓库。 把A组件和B组件的数据放到Vuex中,A组件想要获取B组件数据从vuex中拿,B组件想要获取A组件的数据从Vuex拿。...

qq_51066068的博客 219

Vuex使用指南及原理简介

目录一、Vuex用法指南1. Vue和Vuex的关系2. 核心概念介绍(1). state(2). getters(3). mutations(4). actions(5). modules3. 项目结构二、Vuex架构简介1. Vue.use(Vuex)做了什么2. new Vuex.Store({ ... })做了什么总结 一、Vuex用法指南 1. Vue和Vuex的关系 Vuex是专为vue设计的状态管理框架,类似(并且借鉴自)React的Flux。 我们知道,Vue的设计借鉴了MVVM(Model

夕山雨的博客 1596

vuex的深度理解

Vuex是什么 Vuex是一个专为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的方式发生变化。 为什么用vuex 原先数据需要保存到各自vue实例对象的data中,当使用vuex之后,就可以将data中的数据集中管理到vuex中。让vue中渲染页面的工作和与后台交互的逻辑性的工作分离。使得的代码更加整洁。 vuex的数据维护与vu...

weixin_43221240的博客 357

Vue.js中的状态管理:理解和使用Vuex

在Vue.js中,组件之间的通信往往需要借助于props和emit来完成,但是当应用程序的状态变得比较复杂时,这种方式就变得比较麻烦。我们将通过一个简单的计数器示例来演示如何使用Vuex,并且通过不同的场景,逐步深入Vuex的使用。class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。为了定制 prop 的验证方式,你可以为 props 中的值提供一个带有验证需求的对象,而不是一个字符串数组。此外,我们也可以在这里绑定返回对象的计算属性。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 4158

Vue | Vue 技术探索:深入理解 Vuex

Vuex 是一个专为 Vue.js 应用设计的状态管理模式(状态机)。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

青春木鱼的博客 977

如何使用vuex-详解

1、为什么要使用vuex?2、vuex包含了什么属性?分别有什么作用?3、如何分发动作和提交突变?4、如何在vue中使用vuex?

qq_48109675的博客 455

Vue(状态机)

目录 使用 五个属性 1、State 2、getters 3、mutations 4、actions 5、modules 辅助函数 1、mapState() 2、mapGetters() 3、mapMutations() 4、mapActions() 模块化 namespaced: true表示设置命名空间。 解决冲突的方法:给某个状态机中变量重命名,用辅助函数mapState()。 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所

qq_48108860的博客 1359
上一篇: vue-property-decorator装饰器
下一篇: Nginx配置本地绝对路径下的静态资源
小于___
博客等级 码龄12年 14粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小于___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值