Vuex用法

news2024/12/31 5:34:52

在 Vue.js 项目中,src/store 目录通常用于存放 Vuex store 文件。Vuex 是 Vue 的状态管理库,帮助你更有效地管理应用的状态,特别是在构建大型单页应用程序(SPA)时。通过集中存储和管理应用的所有组件的状态,Vuex 提供了一种可预测的状态管理模式。

src/store 目录结构

一个典型的 src/store 目录结构可能如下所示:

src/
├── store/
│   ├── index.js          // 创建并导出 Vuex Store 实例
│   ├── actions.js        // 定义 action 函数
│   ├── mutations.js      // 定义 mutation 函数
│   ├── getters.js        // 定义 getter 函数
│   ├── state.js          // 定义初始状态
│   └── modules/          // 如果使用模块化 store,则放在此目录下
│       ├── moduleA.js    // 模块 A 的 store 配置
│       └── moduleB.js    // 模块 B 的 store 配置

核心概念

  1. State:表示应用的状态树,即所有组件共享的数据。
  2. Getters:类似于计算属性,用于从 state 中派生出一些状态,例如过滤后的数据列表。
  3. Mutations:更改 state 的唯一方法,必须是同步函数。
  4. Actions:用于处理异步操作,并可以包含多个 mutation,通常用于与 API 交互。
  5. Modules:将 store 分割成多个小模块,每个模块有自己的 state、mutation、action 和 getter,适用于大型应用。

示例代码

index.js

这是创建并导出 Vuex Store 实例的地方。它会引入其他文件中的定义,并配置 store。

import Vue from 'vue';
import Vuex from 'vuex';
import state from './state';
import mutations from './mutations';
import actions from './actions';
import getters from './getters';

Vue.use(Vuex);

export default new Vuex.Store({
  state,
  mutations,
  actions,
  getters,
  // 如果有模块,可以在这里添加
  // modules: {
  //   moduleA: require('./modules/moduleA').default,
  //   moduleB: require('./modules/moduleB').default,
  // },
  strict: process.env.NODE_ENV !== 'production' // 开启严格模式(仅限开发环境)
});
state.js

定义应用的初始状态。

export default {
  count: 0,
  items: []
};
mutations.js

定义改变 state 的同步函数。

export default {
  increment(state) {
    state.count++;
  },
  setItems(state, items) {
    state.items = items;
  }
};
actions.js

定义处理异步逻辑或组合多个 mutation 的函数。

import axios from 'axios';

export default {
  async fetchItems({ commit }) {
    const response = await axios.get('/api/items');
    commit('setItems', response.data);
  }
};
getters.js

定义从 state 中派生出的状态。

export default {
  doneTodos(state) {
    return state.items.filter(item => item.done);
  }
};

使用 Vuex Store

一旦设置了 store,你可以在任何 Vue 组件中通过 this.$store 访问它。以下是一些常见的用法:

  • 访问 Statethis.$store.state.count
  • 提交 Mutationthis.$store.commit('increment')
  • 分发 Actionthis.$store.dispatch('fetchItems')
  • 获取 Getterthis.$store.getters.doneTodos

此外,你还可以使用 map 辅助函数来简化对 store 的访问:

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

export default {
  computed: {
    ...mapState(['count', 'items']),
    ...mapGetters(['doneTodos'])
  },
  methods: {
    ...mapMutations(['increment']),
    ...mapActions(['fetchItems'])
  }
};

模块化 Store

对于较大的应用,推荐将 store 拆分为多个模块,每个模块负责一部分功能。这可以通过在 modules 目录下创建独立的 store 文件来实现。然后,在 index.js 中注册这些模块。

// src/store/modules/moduleA.js
const state = { /* 模块 A 的状态 */ };
const mutations = { /* 模块 A 的 mutations */ };
const actions = { /* 模块 A 的 actions */ };
const getters = { /* 模块 A 的 getters */ };

export default {
  namespaced: true, // 开启命名空间,防止不同模块间名称冲突
  state,
  mutations,
  actions,
  getters
};

// 在 src/store/index.js 中注册模块
import moduleA from './modules/moduleA';
import moduleB from './modules/moduleB';

export default new Vuex.Store({
  modules: {
    moduleA,
    moduleB
  }
});

通过这种方式,你可以保持 store 的组织性,使得代码更易于维护和扩展。

总结

src/store 目录及其内容是 Vue.js 应用程序中状态管理的核心部分。通过合理地组织和使用 Vuex,你可以有效地管理和维护应用的状态,确保应用的可预测性和可维护性。无论是简单的计数器应用还是复杂的多页面 SPA,Vuex 都能提供强大的工具来帮助你构建健壮的应用。

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

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

相关文章

Hyper-V如何将文件复制到虚拟机

创建Hyper-V共享文件夹 通过创建共享文件夹的方式,能够帮助我们在主机与虚拟机之间轻松地进行数据交换共享,那么具体该如何通过网络共享来将文件复制到虚拟机呢?请您接着往下看。 步骤1. 在Hyper-V主机中创建一个文件夹,并将您想…

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…

go语言中zero框架项目日志收集与配置

在 GoZero 项目中,日志收集和配置是非常重要的,尤其是在分布式系统中,日志可以帮助开发人员追踪和排查问题。GoZero 提供了灵活的日志系统,能够方便地进行日志的配置和管理。 以下是如何在 GoZero 项目中进行日志收集与配置的基本…

第4章 共享内存范式:基于R(Rdsm)的简单介绍

第4章 4.1 是什么被共享了? 4.1.1 全局变量 4.1.2 局部变量:栈结构 4.3 共享内存编程的高级介绍:Rdsm包 4.3.1 使用共享内存 4.4 示例:矩阵乘法 4.4.1 代码 4.4.2 分析 4.4.3 代码 4.4.4 详解我们数据的共享本质 4.4.5 计时…

optuna和 lightgbm

文章目录 optuna使用1.导入相关包2.定义模型可选参数3.定义训练代码和评估代码4.定义目标函数5.运行程序6.可视化7.超参数的重要性8.查看相关信息9.可视化的一个完整示例10.lightgbm实验 optuna使用 1.导入相关包 import torch import torch.nn as nn import torch.nn.functi…

SD ComfyUI工作流 对人物图像进行抠图并替换背景

文章目录 人物抠图与换背景SD模型Node节点工作流程工作流下载效果展示人物抠图与换背景 此工作流旨在通过深度学习模型完成精确的人物抠图及背景替换操作。整个流程包括图像加载、遮罩生成、抠图处理、背景替换以及最终的图像优化。其核心基于 SAM(Segment Anything Model)与…

【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 一、求平方根的迭代公式 1. 原理 2. 代码实现示例 二、绝对值函数fabs() 1. 函数介绍 2. 代码示例 三、循环语句 1. for循环 2. while循环 3. do - while循环 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&…

程序猿成长之路之设计模式篇——结构型设计模式

本篇开始介绍结构型设计模式 前言 与创建型设计模式用于创建对象不同,结构型设计模式通过结构化的方式实现功能的扩展和解耦,通过对象的组合、聚合、继承和接口等机制来定义对象之间的关系,从而实现松耦合和灵活性。 常见的结构性设计模式&…

低代码开源项目Joget的研究——Joget8社区版安装部署

大纲 环境准备安装必要软件配置Java配置JAVA_HOME配置Java软链安装三方库 获取源码配置MySql数据库创建用户创建数据库导入初始数据 配置数据库连接配置sessionFactory(非必须,如果后续保存再配置)编译下载tomcat启动下载aspectjweaver移动jw…

数据库的概念和操作

目录 1、数据库的概念和操作 1.1 物理数据库 1. SQL SERVER 2014的三种文件类型 2. 数据库文件组 1.2 逻辑数据库 2、数据库的操作 2.1 T-SQL的语法格式 2.2 创建数据库 2.3 修改数据库 2.4 删除数据库 3、数据库的附加和分离 1、数据库的概念和操作 1.1 物理数据库…

React中最优雅的异步请求

给大家分享在React19中使用useSuspense处理异步请求为什么是被认为最优雅的解决方案 一. 传统方案 解决异步请求的方案中,我们要处理至少两个最基本的逻辑 正常的数据显示数据加载的UI状态 例如: export default function Index(){const [content, …

基于Bregman的交替方向乘子法

目录标题 ADMM方法简介Bregman散度Bregman ADMM的原理主要优势代码示例:各个符号的解释:**梯度的几何含义**:具体数学公式:**应用示例**:**ADMM的标准形式:****ADMM中的变量角色:****ADMM中的更…

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录 1、什么是空字符串?2、两个引号之间加上空格 好的,我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别,以及它们在 SQL 查询中的作用: 1. we_chat_union_id IS NOT NULL 含…

随机变量是一个函数-如何理解

文章目录 一. 随机变量二. 随机变量是一个函数-栗子(一对一)1. 掷骰子的随机变量2. 掷骰子的随机变量(求点数平方)3. 抛硬币的随机变量4. 学生考试得分的随机变量 三. 随机变量是一个函数-理解(多对一) 一. 随机变量 随机变量就是定义在样本空间上的函数…

jwt在express中token的加密解密实现方法

在我们前面学习了 JWT认证机制在Node.js中的详细阐述 之后,今天来详细学习一下token是如何生成的,secret密钥的加密解密过程是怎么样的。 安装依赖 express:用于创建服务器jsonwebtoken:用于生成和验证JWTbody-parser&#xff1…

大厂开发规范-如何规范的提交Git

多人协作开发提交代码通常是遵循约定式提交规范,如果严格安照约定式提交规范, 手动进行代码提交的话,那么是一件非常痛苦的事情,但是 Git 提交规范的处理又势在必行,那么怎么办呢? 经过了很多人的冥思苦想…

企业安装加密软件有什么好处?

加密软件为企业的安全提供了很多便利,从以下几点我们看看比较重要的几个优点: 1、数据保护:企业通常拥有大量的商业机密、客户数据、技术文档等敏感信息。加密软件可以对这些信息进行加密处理,防止未经授权的人员访问。即使数据被…

【ANGULAR网站开发】初始环境搭建

1. 初始化angular项目 1.1 创建angular项目 需要安装npm和nodejs,这边不在重新安装 直接安装最新版本的angular npm install -g angular/cli安装指定大版本的angular npm install -g angular/cli181.2 启动angular 使用idea启动 控制台启动 ng serve启动成功…

Python 屏幕取色工具

Python 屏幕取色工具 1.简介: 屏幕取色小工具‌是一种实用的软件工具,主要用于从屏幕上精确获取颜色值,非常适合设计、编程等需要精确配色的领域。这类工具通常能够从屏幕上任何区域精确提取颜色值,支持在整数值、RGB值、BGR值之…

宏集eX710物联网工控屏在石油开采机械中的应用与优势

案例概况 客户:天津某石油机械公司 应用产品:宏集eX710物联网工控屏 应用场景:钻井平台设备控制系统 一、应用背景 石油开采和生产过程复杂,涵盖钻井平台、采油设备、压缩机、分离器、管道输送系统等多种机械设备。这些设备通…