【前端学习记录】Vuex状态管理学习笔记

为什么使用Vuex?

在Vue中,当遇到多个组件共享状态时,单向数据流的简洁性很容易被破坏:

  • 多个视图依赖于同一状态。
  • 来自不同视图的行为需要变更同一状态。

对于问题一,传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力。
对于问题二,我们经常会采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝。以上的这些模式非常脆弱,通常会导致无法维护的代码。

Vuex通过把组件的共享状态抽取出来,以一个全局单例模式管理。在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为。通过定义和隔离状态管理中的各种概念并通过强制规则维持视图和状态间的独立性,我们的代码将会变得更结构化且易维护。

项目结构

Vuex 并不限制你的代码结构。但是,它规定了一些需要遵守的规则:

1、应用层级的状态应该集中到单个 store 对象中。

2、提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。

3、异步逻辑都应该封装到 action 里面。

只要你遵守以上规则,如何组织代码随你便。如果你的 store 文件太大,只需将 action、mutation 和 getter 分割到单独的文件。

对于大型应用,我们会希望把 Vuex 相关代码分割到模块中。下面是项目结构示例:

├── index.html
├── main.js
├── api
│   └── ... # 抽取出API请求
├── components
│   ├── App.vue
│   └── ...
└── store├── index.js          # 我们组装模块并导出 store 的地方├── actions.js        # 根级别的 action├── mutations.js      # 根级别的 mutation└── modules├── cart.js       # 购物车模块└── products.js   # 产品模块

使用方法

let store = new Vuex.Store({strict: false, //启用严格模式,生产环境请置为falsemodules: {index: {namespaced: true,state: {// 存放共享状态值userInfo: localStorage.getItem("user") || {}, //用户信息},mutations: { //更新状态值//userInfo[INIT_USERINFO](state) {state.userInfo = JSON.parse(localStorage.getItem("user")) || {};},},actions: {// 处理异步更新状态值async initApp({ commit, dispatch }) {commit(INIT_USERINFO);await dispatch('initHome');},}}}
});

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。要唤醒一个 mutation handler,你需要以相应的 type 调用 store.commit 方法。但是mutation 必须是同步函数。

Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态
  • Action 可以包含任意异步操作。
  • Action 通过 store.dispatch 方法触发。

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

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

相关文章

智能优化算法应用:基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.象群算法4.实验参数设定5.算法结果6.参考文献7.MA…

仿windows12网盘,私有云盘部署教程,支持多种网盘

仿windows12网盘,私有云盘部署教程,支持多种网盘 资源宝分享:www.httple.net 视频教程:https://www.bilibili.com/video/BV1m64y1G7Bq/ 宝塔部署方式: 1.验证是否安装jdk,没有安装请看安装教程 推荐安装jdk8(注意您…

SAP ABAP 面试题交流

1.列举AT事件并说明其作用,AT事件中的工作区有何不同? AT FIRST 循环loop中执行第一条数据 AT LAST 循环loop中执行最后一条数据 AT NEW 循环loop中指定字段(包含指定字段)记录与上一条记录不一致数据执行 AT END OF 循环loo…

Visual Studio调试技巧合集

Visual Studio调试技巧合集 1 如何同一个项目运行不同main文件? 1 如何同一个项目运行不同main文件? (1)移动鼠标到需要关掉调试的文件,点击右键属性–常规–从生成中排除–是–确定,即显示“-”号排除&am…

Python自动化测试系列[v1.0.0][多种数据驱动实现附源码]

前情提要 请确保已经熟练掌握元素定位的常用方法及基本支持,请参考Python自动化测试系列[v1.0.0][元素定位] 数据驱动测试是自动化测试中一种重要的设计模式,这种设计模式可以将测试数据和测试代码分开,实现数据与代码解耦,与此同…

信息学奥赛一本通1003:对齐输出

1003:对齐输出 时间限制: 1000 ms 内存限制: 66536 KB 提交数: 320051 通过数: 106753 【题目描述】 读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空…

变量与方法面试题

char 型变量中能不能存储一个中文汉字,为什么? char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法)&a…

Python FuckIt模块:代码的“不死鸟”

更多资料获取 📚 个人网站:ipengtao.com 在编程世界中,每个开发者都曾遇到过代码中的错误,有时这些错误可能让人崩溃。但是,有一天,听说了一个叫做"FuckIt"的模块,它声称可以帮助摆脱…

【PIE-Engine 数据资源】全球海面温度产品

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球海面温度产品时间范围2002年- 2018年空间范围全球数据来源毛克彪教授团队代码片段var images pie.lmageCollection(“CAAS/SSTG”) 二、描述 全球海面温度产品是 2002-2019 年的全球海面温度…

ES中根据主键_id查询记录

一、需求 es中_type:_doc,想要根据主键_id查询记录 二、实现 复合查询中使用语句查询http://192.168.1.1/_doc/1

Mybatis的foreach标签的使用以及参数的含义

Mybatis的foreach标签的使用以及参数的含义 语法格式: 属性说明: collection属性的注意点:

Python 如何进行游戏开发?

游戏开发是一个广泛的领域,Python 作为一门灵活的编程语言,可以用于不同类型的游戏开发。以下是一些建议和步骤,帮助你开始使用 Python 进行游戏开发: 1、选择游戏开发库/框架: Pygame: Pygame 是一个用于…

node js 递归生成vue文件目录

目录 什么是 fs 文件系统模块 fs.existsSync方法 方法说明: 语法: 向指定的文件中写入内容 writeFile fs.writeFile() 的语法格式 fs.writeFile() 的示例代码 判断文件是否写入成功 fs.mkdir 创建目录 目录已存在,重复创建 创建的目…

Python:Anaconda

简介 Anaconda是一个流行的Python发行版,专为科学计算和数据分析而设计。它包含了Python语言、Jupyter Notebook以及用于科学计算的众多包,如NumPy、Pandas、Matplotlib等。 Anaconda的特点是开箱即用,用户无需单独安装这些包,极…

Leetcode—459.重复的子字符串【简单】

2023每日刷题(五十九) Leetcode—459.重复的子字符串 算法思想 巧解的算法思想 实现代码 从第一个位置开始到s.size()之前,看s字符串是否是ss的子串 class Solution { public:bool repeatedSubstringPattern(string s) {return (s s).fin…

vuejs 3.x项目使用terser-webpack-plugin 去除console 没有生效

vuejs版本 3.2.13 使用的是vue cli 4 在vue.config.js 中的配置 因为vue项目内置了terser 所以不需要安装,直接引用 const TerserPlugin require(terser-webpack-plugin);vue.config.js 中的配置 module.exports {//此处省略其他配置。。。configureWebpack:…

2023全球开发者生态调研:84%的开发者表示他们在工作中正积极使用生成式AI工具

今年JetBrains首次在一年一度的开发者生态调研中,增加了人工智能方向的问题。在全球26348名开发者参与的调研中,总体对人工智能的发展持乐观态度。特别是生成式AI在软件开发和编程环节中的应用,84%的开发者表示他们在工作中正在积极使用生成式…

占位图片(Placeholder Image)

一、引言 在网页设计和开发中,占位图片(Placeholder Image)是一种常见的技术手段,用于在用户上传图片之前或者图片加载失败时,展示一个临时替代的图片,以提高用户体验。本文将详细介绍占位图片的实现原理和…

中医电子处方管理系统软件,中医配方模板一键生成软件操作教程

一、前言: 在中医开电子处方时,如果能够使用配方模板功能,则可以节省很多时间。使用配方模板一键导入,几秒即可完成开单。 下面就以佳易王电子处方管理系统软件V17.1版本为例说明,其他版本可以参考,软件下…

获取 VirtualBox COM 对象失败,应用程序被终端 0x80000405错误解决以及Virtualbox下载

错误详情展示及解决_情况一 返回代码展示: 解决方式:打开在virtualbox的安装目录,找到VirtualBox.xml文件,将它删掉找到 错误详情展示及解决_情况二 返回代码展示: 情况说明: 原来是win10的电脑&#xf…