Vue.js 中使用 vuex 进行状态管理

前言

随着单页面应用越来越流行,前端应用的规模不断增大,状态管理已经成为了一个必备的部分。Vuex 是一个专为 Vue.js 设计的状态管理库,它可以方便的集中管理 Vue.js 应用中的所有组件的状态。本文将介绍 Vuex 的原理、安装和使用,让你更好的进行前端开发。

核心概念

Vuex 的核心概念分为五个:state、getters、mutations、actions 和 modules。

  • state:状态存储库。即一个JavaScript对象,它包含我们组件的应用程序级别状态。可以通过 $store.state 访问。
  • getters:和 state 一样,getters 也表示存储库。但是 getters 获取的状态不仅仅只是 state 的副本,而是需要通过某种逻辑操作等获取。所以 getters 可以理解为 store 的计算属性,它们的返回值将缓存,只有从对应的依赖项发生更改时才会重新进行计算。
  • mutations:用于同步更改状态。实质上就是一个设置状态的纯函数(接受状态作为第一个参数)。不可以进行异步操作,因为每一个 mutation 都是同步执行的。
  • actions:用于异步调用 mutations,提交 mutation 请求,以便通过用户操作、网络请求等触发的间接事件去改变状态。mutations 只能同步执行,但是 actions 可以包含任何异步请求组合。
  • modules:严格组织代码,避免它们膨胀到无法管理。对于每个子模块,都有一组自己的 mutation、action 和 getter。

安装

安装 Vuex 很简单,只需在终端运行下面的命令即可。

--- ------- ---- ------

基本使用

使用 Vuex 首先要创建一个 store,然后将其添加到 Vue 实例中即可。下面是一个最基本的使用。

-- --------
------ --- ---- -----
------ ---- ---- ------

-------------

------ ------- --- ------------
  ------ -
    ------ -
  --
  ---------- -
    ---------------- -
      -------------
    -
  --
  -------- -
    ------------------ -
      ---------------------------
    -
  --
  -------- -
    ------ ----- -- -----------
  -
--

-- -------
------ --- ---- -----
------ ----- ---- ------------
------ --- ---- -----------

------------------------ - -----

--- -----
  ------
  ------- - -- ------
-----------------

上述代码定义了一个最基本的 store,它包含了一个 count 的状态和一个 add 方法。在 main.js 中将其引入,在所有子组件中都可以使用 $store 变量去访问,如下所示。

-- ------- 
----------
  -----
    ------ ----- -------
    ------- -------------------------
  ------
-----------

--------
------ ------- -
  ----- ------
  --------- -
    ------- -
      ------ -------------------------
    -
  --
  -------- -
    ----- -
      ---------------------------------
    -
  -
-
---------

增加 modules

如果应用程序规模增大,只有一个对象维护状态就显得非常的不爽了。为了解决这个问题,我们可以将 store 对象拆分成多个子模块,每个子模块维护自己的状态和 mutation/actoin/getter。假设我们有一个应用程序有两个子页面:项目页面和用户页面,我们可以将其定义为两个子模块,如下图所示。

代码如下:

-- --------
------ --- ---- -----
------ ---- ---- ------
------ ---- ---- ----------------
------ ------- ---- -------------------

-------------

------ ------- --- ------------
  -------- -
    -----
    -------
  -
--

子模块维护其自己的状态和 getter,在 modules 文件夹中新建子模块的模块,如下所示。

-- -------
----- ----- - -
  ------ --
-

----- ------- - -
  ------ ----- -- -----------
-

----- --------- - -
  --------------- ----- -
    ----------------------
  -
-

----- ------- - -
  ---------------- ----- -
    -------------------------- -----
  -
-

------ ------- -
  ------
  --------
  ----------
  -------
-

项目模块同理,通过拆分各个子模块即可组成一个完整的 store。

总结

本文简单介绍了 Vuex 的原理和基础使用。在实际使用中,对于大型的前端应用来说,合理使用 Vuex 可以方便的管理应用中的各种状态,实现可维护性高的代码。在使用中,我们要熟悉各种基本概念,例如在 Vue 中如何获取 store 中的状态,如何按照模块拆分 store 对象等等。并在最终开发中合理运用 Vuex,写出高质量的代码。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/649cceb648841e9894980dc2


猜你喜欢

  • Promise 如何优雅地处理多个异步操作?

    Promise 如何优雅地处理多个异步操作? 随着前端开发应用场景的增加,我们需要在前端中处理大量的异步操作,这不仅需要我们有良好的编码习惯,还需要掌握相应的异步编程技术。

    1 年前
  • 使用 ES6 模块化构建自定义元素

    引言 随着前端技术的不断发展,自定义元素的概念越来越被关注。在 Web 组件的实现方面,自定义元素可以帮助开发者更加高效地构建出符合自己需求的组件。本文将介绍如何使用 ES6 模块化技术构建自定义元素...

    1 年前
  • 如何使用 Socket.io 进行一对一私聊

    Socket.io 是一个基于 Node.js 的实时应用程序框架,它使得服务器端和客户端之间的数据传输变得更加容易。其中包括实现一对一私聊这样的功能。 在本文中,我们将深入介绍如何使用 Socket...

    1 年前
  • 解决 Node.js 连接 MySQL 数据库时的常见问题

    Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行环境,被广泛应用于服务器端开发。在应用中,我们时常需要连接 MySQL 数据库。这篇文章将介绍在 Node.js 中连...

    1 年前
  • ES9 中 BigInt 数据类型的介绍及使用方法

    随着计算机科学和技术的不断发展,数据量也不断增大,大量需要进行处理的数据也随之产生。因此,JavaScript 在 ES9 版本中引入了一种全新的数据类型:BigInt。

    1 年前
  • 如何使用 Enzyme 测试 React 组件的生命周期

    React 是一个非常流行的前端框架,并且其测试工具——Enzyme可以使得我们更容易地测试 React 组件。在本篇文章中,我们将一步步介绍如何使用 Enzyme 测试 React 组件的生命周期。

    1 年前
  • 如何使用 Server-sent Events 实现实时页面更新

    在 Web 应用程序中,实时 (real-time) 更新是十分重要的功能,它可以提升用户体验,增加应用程序的价值。常用的实现方法包括轮询(Polling)、WebSocket 和 Server-se...

    1 年前
  • 如何解决 CSS Reset 引起的字体大小不一致问题

    CSS Reset 是为了消除不同浏览器之间的差别,并让网站在不同的浏览器中展现出一致的效果。但有时候,CSS Reset反而会引起一些问题,比如字体大小不一致。 在使用 CSS Reset 的时候,...

    1 年前
  • MongoDB 如何优化查询性能?

    在现代 Web 应用中,数据库是必不可少的一部分。作为一种灵活性高、易于扩展的非关系型数据库,MongoDB 逐渐成为了前后端开发中的首选数据库。然而,尽管 MongoDB 进行了很多工作以提高其性能...

    1 年前
  • TypeScript 2.9 发布:缩小类型检查的范围 - by 不说

    TypeScript 是一个由微软开发的一种开源的编程语言,它是 JavaScript 的一个超集,基本包含了所有的 JavaScript 语言元素,同时支持强类型、对象导向等特性。

    1 年前
  • 如何优化 LESS 编译输出的 CSS 文件大小

    背景 LESS 是一种流行的 CSS 预处理器,它为 CSS 提供了一些重要的功能,例如变量、混合、嵌套、条件语句等等,这些功能可以使得 CSS 的编写更加灵活方便,同时也可以提高代码复用性和可维护性...

    1 年前
  • 利用 Flexbox 实现瀑布流布局的方法及实践

    瀑布流布局是一种常见的网站页面布局方式,特别适合展示图片等网站内容。实现瀑布流布局的方法有很多,本文将介绍如何利用 Flexbox 实现瀑布流布局,并给出示例代码。

    1 年前
  • PM2:一个生产环境 node.js 应用的进程管理器

    在生产环境中,我们需要部署可靠的 node.js 应用程序。一个可靠的应用程序需要能够持久性的运行,即使发生故障和异常情况也能够迅速恢复。PM2 正是这一目的而生的,它是一个强大的进程管理器,对于 n...

    1 年前
  • 推荐一款 Material Design 风格的 Dialog 控件

    引言 在前端开发中,弹出框组件是必不可少的,用来提示用户需要注意的事项或者进行操作的反馈。在 Material Design 中,Dialog 控件是一种常见的交互组件,能够提供美观、易用的体验效果。

    1 年前
  • Webpack 性能优化:配置分析与策略

    前言 Webpack 是现代前端开发中重要的构建工具之一,但是在项目不断壮大的过程中,Webpack 也可能会遇到一些性能问题。特别是当项目较大时,Webpack 的构建时间会变得非常漫长。

    1 年前
  • Express.js 中使用 Passport 实现用户认证

    在现代 web 应用程序中,用户认证是必不可少的功能。有许多开源的认证库可以使用,其中 Passport 是最流行的之一。它是一个可扩展的 Node.js 应用程序,可用于通过多种认证方式进行用户认证...

    1 年前
  • ES7 中的 Array.prototype.at()

    ES7 中的 Array.prototype.at() 在 JavaScript 中使用数组是非常常见的,但在以往的 ES6 中,如果我们想要访问数组中的某一项,只能通过索引值将其取出,如 arr[0...

    1 年前
  • 使用 Tailwind CSS 框架时,如何解决样式和布局出现的问题?

    什么是 Tailwind CSS? Tailwind CSS 是一款由 Adam Wathan 和 Steve Schoger 开发的 CSS 框架,它与传统的 CSS 框架不同,因为它不是基于 UI...

    1 年前
  • 在 Vue.js 项目中使用 echarts 出现的问题与解决方案

    Vue.js 是一种流行的 JavaScript 框架,而 echarts 则是当前最受欢迎的数据可视化工具。在 Vue.js 项目中集成 echarts 可以使得数据图表更加生动直观。

    1 年前
  • 解析 ECMAScript 2019 的 Object.fromEntries() 方法

    ECMAScript 2019 规范中新增了 Object.fromEntries() 方法,它的作用是将一个由键值对组成的数组转换为一个对象。本文将详细解析这个方法并带来指导意义和示例代码。

    1 年前

相关推荐

    暂无文章