状态管理VueX

news2024/11/18 0:19:47

 哈喽~大家好,这篇来看看状态管理VueX。

 🥇个人主页:个人主页​​​​​             

🥈 系列专栏:【专栏】           

🥉与这篇相关的文章:            

SpringCloud Sentinel 使用SpringCloud Sentinel 使用_程序猿追的博客-CSDN博客_springcloud使用sentinel
将Nacos注册到springboot使用以及Feign实现服务调用将Nacos注册到springboot使用以及Feign实现服务调用_程序猿追的博客-CSDN博客_nacos springboot 服务调用
微服务介绍与 SpringCloud Eureka微服务介绍与 SpringCloud Eureka_程序猿追的博客-CSDN博客

目录

一、前言

1、什么是VueX?

2、状态管理

二、使用说明

1、State

2、Getter

3、Mutation

4、Action

5、Module

三、代码实现

1、效果展示

2、代码展示

四、总结


一、前言

1、什么是VueX?

Vuex是一个专为Vue.js应用程序开发的状态管理模式;它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex可以管理复杂应用的数据状态,比如兄弟组件的通信、多层嵌套的组件的传值等等。

对于组件化开发来说,大型应用的状态往往跨越多个组件。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。

基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。

Vuex 是一个专为 Vue.js 应用程序开发的状态管理库,采用集中式存储管理应用的所有组件的状态。

简单的说,Vuex用于管理分散在Vue各个组件中的数据。

大家都知道兄弟组件之间的传值是用到事件EventBus来进行的,当然也可以通过父组件作为桥梁进行传值,那么遇到祖孙组件时传值就会比较麻烦,所以eventbus只是小型项目考虑的,当项目大起来的时候,就考虑使用vuex。

2、状态管理

每一个Vuex应用的核心都是一个store,与普通的全局对象不同的是,基于Vue数据与视图绑定的特点,当store中的状态发生变化时,与之绑定的视图也会被重新渲染。

store中的状态不允许被直接修改,改变store中的状态的唯一途径就是显式地提交(commit)mutation,这可以让我们方便地跟踪每一个状态的变化。

在大型复杂应用中,如果无法有效地跟踪到状态的变化,将会对理解和维护代码带来极大的困扰。

Vuex中有5个重要的概念:State、Getter、Mutation、Action、Module。

state,驱动应用的数据源;

view,以声明方式将 state 映射到视图;

actions,响应在 view 上的用户输入导致的状态变化。

mutations

state数据的修改只能通过mutations,并且mutations必须是同步更新,目的是形成数据快照 mutations是一个对象,对象中存放修改state的方法

Vuex中mutations中要求不能写异步代码,如果有异步的ajax请求,应该放置在actions中

actions

state是存放数据的,mutations是同步更新数据,actions则负责进行异步操作 定义actions 

 

二、使用说明

1、State

State用于维护所有应用层的状态,并确保应用只有唯一的数据源

 

在组件中,可以直接使用this.$store.state.count访问数据,也可以先用mapState辅助函数将其映射下来。

 

2、Getter

Getter维护由State派生的一些状态,这些状态随着State状态的变化而变化。

 

在组件中,可以直接使用this.$store.getters.doneTodos,也可以先用mapGetters辅助函数将其映射下来,代码如下:

 

3、Mutation

Mutation提供修改State状态的方法。

 

在组件中,可以直接使用store.commit来提交mutation。

 

也可以先用mapMutation辅助函数将其映射下来

 

4、Action

Action类似Mutation,不同在于:

Action不能直接修改状态,只能通过提交mutation来修改,Action可以包含异步操作。

 

在组件中,可以直接使用this.$store.dispatch('xxx')分发 action,或者使用mapActions辅助函数先将其映射下来。

 

5、Module

由于使用单一状态树,当项目的状态非常多时,store对象就会变得十分臃肿。因此,Vuex允许我们将store分割成模块(Module)

每个模块拥有独立的State、Getter、Mutation和Action,模块之中还可以嵌套模块,每一级都有着相同的结构。

 

三、代码实现

1、效果展示

 

2、代码展示

HalloWorld.vue 代码

<template>
  <div class="hello">
    <!-- {{this.$store.state.count}} -->
    {{count}}
    <button @click="add">+1</button>
    <ui>
      <li v-for="todo in todos" :key="todo.id">{{todo.text}}</li>
    </ui>
  </div>
</template>
​
<script>
import { mapGetters, mapState } from 'vuex';
export default {
  name: 'HelloWorld',
  computed:{
    count(){
      return this.$store.state.count;
    }
  },
  computed:mapState([
    'count',"todos"
  ]),
  // computed:{
  //   ...mapState([
  //     'count','todos'
  //   ]),
  //   ...mapGetters([
  //     'doneTodos'
  //   ])
  // },
  methods:{
    add(){
      this.$store.commit("increment")
    }
  }
}
</script>
​
<style>
​
</style>
​

App.vue 代码

<template>
  <div id="app">
    <HelloWorld/>
  </div>
</template>
​
<script>
import HelloWorld from './components/HelloWorld.vue'
​
export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>
​
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
​

mian.js 代码

import Vue from 'vue'
import App from './App.vue'
import store from "../store"
​
Vue.config.productionTip = false
​
new Vue({
  render: h => h(App),
  store
}).$mount('#app')
​

store 目录下面的index.js 代码

import Vue from 'vue'
import Vuex from 'vuex'
​
Vue.use(Vuex)
​
const store = new Vuex.Store({
  state: {
    count: 0,
    todos: [
        {id: 1, text: '唱歌', done: true},
        {id: 2, text: '跳舞', done: false},
        {id: 3, text: '我会rap', done: true},
        {id: 4, text: '我会打篮球', done: false}
    ]
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})
​
export default store

四、总结

作为一个状态管理器,首先要有保管状态的容器——State;

为了满足衍生数据和数据链的需求,从而有了Getter;

为了可以“显式地”修改状态,所以需要Mutation;

为了可以“异步地”修改状态(满足AJAX等异步数据交互),所以需要Action;

最后,如果应用有成百上千个状态,放在一起会显得十分庞杂,所以分模块管理(Module)也是必不可少的;

Vuex并不是Vue应用开发的必选项,在使用时,应先考虑项目的规模和特点,有选择地进行取舍,对于小型应用来说,完全没有必要引入状态管理,因为这会带来更多的开发成本;

不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java整数转罗马数字

罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1。12 写做 XII &#xff0c;即为…

低版本jQuery导致XSS Nuclei FUZZ POC

目录 1.前言 2. Nuclei FUZZ jQuery XSS POC 3.漏洞验证 4.修复建议 1.前言 我记得以前用那些漏扫工具时时常会报一个低版本jQuery的安全问题,当时还不会验证。直到有一天,它托梦给我。我悟了。低版本jQuery导致XSS POC文件文末获取。

java.io.IOException: Could not find resource com/itheima/mapper/UserMapper.xml

问题&#xff1a;Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/itheima/mapper/UserMapper.xml问题描述&#xff1a;找不到UserMapper解决方案&#xff1a;这是我原来的路径这是我改后的路径&#xff08;很重要&#xff…

羊了个羊游戏开发教程2:随机生成卡牌

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。上一节教程里我们实现了游戏中最难的地方——堆叠牌的拾取&#xff0c;这节教程我们来继续学…

关于CountDownLatch

关于CountDownLatchCountDownLatch 是什么CountDownLatch 如何工作CountDownLatch API使用示例与 Join 的区别CountDownLatch 是什么 CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如&#xff0c;应用程序的主线程希望在负责启动框架服务的线程已…

强化学习基础

强化学习的三种方法 基于价值&#xff08;value-based&#xff09; 基于策略&#xff08;policy-based&#xff09; 基于模型&#xff08;model-based&#xff09; 一 基于价值的方法 基于价值 (Value-Based)这种方法&#xff0c;目标是优化价值函数V(s)。 价值函数会告诉我们…

LeetCode 1669. 合并两个链表(C++)

思路&#xff1a; 该题思路很简单&#xff0c;对于单向链表&#xff0c;先遍历到指定的右边界的位置b1&#xff0c;做好标记供连接&#xff1b; 然后对于a-1位置的结点&#xff0c;连接list2&#xff0c;并最后连接后半段的list1 1.题目如下&#xff1a; 给你两个链表 list1 …

ATX agent+UIautomation2 自动化测试介绍

目前ATXUIautomator2 处于自动化界的浪口风尖&#xff0c;现在有幸终于有时间对ATX进行了粗浅的了解 为什么要用ATX ATXUIautomator2的优势&#xff1a; 1.速度吊打appnium&#xff0c;群里面的人这样说的 运行速度快&#xff0c;比Appium运行速度快了好多。&#xff08;用…

分布式架构

目录 一、前言 二、分布式架构的发展历史 三、分布式架构发展的里程碑 四、分布式系统的意义 五、分布式架构的常见概念 六、分布式领域中冯诺依曼模型的变化 七、分布式系统的难点 八、总结 一、前言 ​  我们都知道&#xff0c;当今无论在BAT这样的大公司&#xff…

Install Linux on Windows with WSL2 (使用 WSL2 在 Windows 上安装 Linux)

Install Linux on Windows with WSL2 (使用 WSL2 在 Windows 上安装 Linux)https://learn.microsoft.com/en-us/windows/wsl/ 在 Windows 上运行 Linux - 在 Windows 11 上运行 Ubuntu 20.04 LTS Developers can access the power of both Windows and Linux at the same tim…

实验十三、阻容耦合共射放大电路的频率响应

一、题目 利用 Multism 从以下几个方面研究图1所示的阻容耦合共射放大电路的频率响应。图1阻容耦合共射放大电路图1\,\,阻容耦合共射放大电路图1阻容耦合共射放大电路&#xff08;1&#xff09;设 C1C210μFC_1C_210\,\textrm{μF}C1​C2​10μF&#xff0c;分别测试它们所确定…

6万字电力行业系统解决方案光伏电站综合安防系统解决方案

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目录 第 一 章背景与需求 1.1行…

2023年收银管理系统排行榜新鲜出炉

随着新零售的模式普及&#xff0c;越来越多的零售店选择了用收银系统代替收银机。因为收银系统不仅具备收银等功能&#xff0c;其实还有各种店铺数据管理功能、经销商信息管理&#xff0c;销售数据分析等许多功能等。所以如果想清晰地知道门店每天盈利情况和库存情况和采购过程…

这些小众却足够惊艳的素材库,你知道吗?

推荐几个我经常使用的网站&#xff0c;绝对够惊艳。 1、菜鸟图库&#xff08;免费设计素材&#xff09; https://www.sucai999.com/?vNTYxMjky 这是一个为新手设计师提供免费素材的设计网站&#xff0c;站内有超多平面模板、海报、UI设计、电商设计等相关素材&#xff0c;质…

JS设计模式

文章目录1 什么是设计模式&#xff1f;2 发布-订阅模式2.1 DOM事件2.2 基于Broadcast Channel实现跨页面通信2.3 基于localStorage实现跨页面通信2.4 使用 Vue 的 EventBus 进行跨组件通信2.4 使用 React 的 EventEmitter 进行跨组件通信3 装饰器模式3.1 React 高阶组件 HOC3.2…

MySql图形化界面工具--DataGrip安装和使用

一、下载安装 1、官网下载安装包&#xff0c;双击开始安装 2、点击next&#xff0c;一步一步的完成安装 3、选择DataGrip的安装目录&#xff0c;然后选择下一步 4、下一步&#xff0c;执行安装 二、使用 1、添加数据源 配置以及驱动jar包下载完毕之后&#xff0c;…

Pod基本概念与Pod应用生命周期

Pod是一个逻辑抽象概念&#xff0c;kubernetes创建和管理的最小单元&#xff0c;一个Pod由一个容器或多个容器组成。特点&#xff1a;一个Pod可以理解为是一个应用实例&#xff0c;提供服务Pod中容器始终部署在一个Node上Pod中容器共享网络、存储资源Pod主要用法&#xff1a;运…

大件传输的9种方法

不知道你有没有试过用电子邮件进行大文件传输&#xff0c;由于文件大小的限制&#xff0c;往往会发送失败。同时&#xff0c;一些文件共享服务对传输的文件有大小限制&#xff0c;使得你无法与朋友分享电影片段或向客户展示你的工作样本。还有一些要求你注册一个账户&#xff0…

【JVM基础内容速查表】JVM基础知识 默认参数 GC命令 工具使用 JVM参数设置、说明、使用方法、注意事项等(持续更新)

目录一、JVM前置知识1. -X、-XX含义2. JVM参数值的类型和设置方式3. 查看GC时用到的命令和JVM参数4. 查看JVM默认参数二、垃圾收集器选择-XX:UseSerialGC-XX:UseParallelGC-XX:UseParallelOldGC-XX:UseParNewGC-XX:UseConcMarkSweepGC-XX:UseG1GC三、垃圾收集器特有参数1. ParN…

pyinstaller打包遇到的问题

1、ModuleNotFoundError: No module named ‘scipy.spatial.transform_rotaion_groups’ 解决办法&#xff1a;–hidden-import scipy.spatial.transform._rotation_groups 2、FileNotFoundError:[Errno 2] No such file or directory:‘C:\Users\Gw0021\AppData\Local\Temp\_M…