uniapp 中 vuex 的使用

news2024/9/24 17:12:33
  • 1. uniapp 中 vuex 的介绍

  • 2. uniapp 中 vuex 的使用

  • 3. require.context 介绍

  • 4. vuex 模块分离

  • 5. vuex 模块分离 - 代码优化

1. uniapp 中 vuex 的介绍


uniapp 内置了 vuex,不需像 vue 脚手架那样里通过 npm 安装了,我们只需要引用就行了

2. uniapp 中 vuex 的使用


在 uniapp 根目录创建 store/index.js 文件

// 1. 引入vue 和 vueximport Vue from 'vue';import Vuex from 'vuex';// 2. 安装插件Vue.use(Vuex)// 3. 导入对象const store = new Vuex.Store({ })// 4. 默认导出 storeexport default store

在 uniapp 根目录下的 main.js 中新增下面两处修改,导入 store 对象,并将 store 对象挂载到 vue 实例中

修改 store/index.js 文件,在 vuex 中添加一个数据

const store = new Vuex.Store({    state: {        name: 'liang'    }})

在页面中使用 vuex 数据(下面 computed 的两种写法都是正确的):

<template>    <view>        {{ name }}    </view></template><script>    import { mapState } from 'vuex';    export default {        // computed: mapState(['name']),        computed: {            ...mapState(['name'])        }    }</script>

通过修改 main.js 我们可以把 store 对象挂载到 uni 上

uni.$store = store

然后,在页面中可以通过下面方式获取到 vuex 中的数据

// this 是 vue 实例,所以,当挂载到 Vue 上时要注意 this 的指向this.$store.state// 挂载到 uni 上时获取 vuex 数据uni.$store.state

3. require.context 介绍


require.context 是 webpack 提供的一个 api,该 api 可以实现工程自动化(遍历文件夹中的文件,自动导入模块)

语法格式:

// directory 检索的目录// useSubdirectories 是否检索子目录,取值: true | false// 匹配文件的正则表达式,一般用于匹配文件名require.context(directory, useSubdirectories, regExp)

使用示例:

// 匹配当前目录下的 modules 中所有以 .js 结尾的文件// require.context 的返回值是一个函数const files = require.context("./modules", false, /\.js$/);// files.keys() 匹配到的文件// ['./common.js', './user.js']files.keys().forEach(key => {    // files(key) 文件 export 出的数据    const data = files(key)});

4. vuex 模块分离


我当前所在的公司有一套前端基础框架,这是一个 uniapp 项目,对 vuex 进行了模块分离处理。当 vuex 需要存储的数据比较多时,比如有:用户,购物车,积分商城等模块,为了方便管理,对应前面三个功能可以分离出三个模块文件,但并没有使用 vuex 的模块化

// tore/modules/user.js 用户模块export const state = {    token: ''}// store/modules/cart.js 购物车模块export const state = {    cart: []}// store/index.js 模块合并之后export const state = {    token: '',    cart: []}

下面是我们公司模块分离方式的代码示例:

a. 分离出的模块文件: store/modules/*.js

export const state = {}export const mutations = {}export const actions = {}

b. 在 store/index.js 中导入模块化的文件,合并对象属性

import Vue from 'vue';import Vuex from 'vuex';Vue.use(Vuex)const files = require.context("./modules", false, /\.js$/);const modules = {    state: {},    mutations: {},    actions: {}};files.keys().forEach(key => {    Object.assign(modules.state, files(key)["state"]);    Object.assign(modules.mutations, files(key)["mutations"]);    Object.assign(modules.actions, files(key)["actions"]);});const store = new Vuex.Store(modules)export default store

5. vuex 模块分离 - 代码优化


上面模块分离是我们公司的前端基础框架的代码,但我觉得可以将代码再优化一下

通过上面代码可以发现,抽离出的模块文件代码是这样的:

export const state = {}export const mutations = {}export const actions = {}

给 vuex 的几个属性都定义了常量,然后再分别导出,我不想这样写,可以这样导出

export default {    state: { },    mutations: {},    actions: {}}

store/index.js 中的 files.keys().forEach() 需要修改下:

files.keys().forEach(key => {    Object.keys(modules).forEach(item => {        Object.assign(modules[item], files(key).default[item])    })});

 

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

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

相关文章

会员接口治理的探索与实践

随着爱奇艺会员破亿&#xff0c;会员服务从小而快的单一业务系统升级为了按领域划分的微服务模式&#xff0c;满足了业务的高速发展和服务的高流量调用&#xff0c;但是微服务的拆分&#xff0c;系统间的交互越来越多&#xff0c;在需求开发时&#xff0c;协作成本随之增加&…

[激光原理与应用-30]:典型激光器 -2- 气体激光器 (连续激光器)

目录 第1章 概览 1.1 什么气体激光器 1.2 主要激励方式 1.3 发展历程 1.4 组成 1.5 特点 第2章 气体激光器分类 2.1 原子气体激光器 2.2 离子气体激光器 2.3 分子气体激光器 2.4 准分子激光器 第1章 概览 1.1 什么气体激光器 气体激光器利用气体作为工作物质产生激…

AlphaFold2源码解析(6)--模型之特征表征

AlphaFold2源码解析(6)–模型之特征表征 整体推理说明&#xff1a; Embedding只是在推理使用&#xff0c;影响非常小&#xff08;sup-Inference篇章&#xff09; 特征表征表示的入口模型如下&#xff1a; evoformer_module EmbeddingsAndEvoformer(self.config.embeddings_…

亚马逊卖家店铺没流量怎么办?这几个方法可以试试!

大家都知道亚马逊是一个产品为王的平台&#xff0c;只有我们的产品好&#xff0c;亚马逊就会给我们推送流量&#xff0c;作为一个新手卖家该如何帮亚马逊店铺来获取流量&#xff0c;今天赛狐ERP就来给卖家们几个方法&#xff0c;来获取流量。 1.自然搜索 自然流量顾名思义也就…

docker搭建测试,镜像保存并传输发布

Docker OPENJDK本身的docker占用526M &#xff0c;昨天我在本地测试的&#xff0c;加上我们的项目大小&#xff0c;最终创建的镜像大小大概是526M项目大小&#xff0c;镜像大小大概这么多&#xff0c;我们需要先在服务器上安装docker&#xff0c;之后安装dockerOpenJDK&#x…

LIO-SAM源码解析(四):imuPreintegration.cpp

1. 代码流程 2. 功能说明 这个cpp文件主要有两个类&#xff0c;一个叫IMUPreintegration类&#xff0c;一个叫TransformFusion类。 现在我们分开讲&#xff0c;先说IMUPreintegration类。 关于IMU原始数据&#xff0c;送入imuhandle中&#xff1a; 2.1. imuhandle imu原始…

re:Invent现场直击:无处不在的云计算

2012年&#xff0c;第一届亚马逊云科技re:Invent全球大会拉开帷幕的时候&#xff0c;许多人还不知道云计算为何物。2022年&#xff0c;第十一届亚马逊云科技re:Invent全球大会召开的时候&#xff0c;人们发现云计算已经是无处不在。云计算从遥不可及到无处不在美国当地时间2022…

Clock and Jitter

1、Jitter定义 定义1&#xff08;SONET规范&#xff09;&#xff1a;抖动可以定义为数字信号在重要时点上偏离理想时间位置的短期变化。 2、Total Jitter表征方式 2.1、周期抖动&#xff08;Period Jitter&#xff09;&#xff0c;与理想时钟无关&#xff0c;不累积 Period …

Qt之QPropertyAnimation移动动画

#include "cpropertyanimationtest.h" #include "ui_cpropertyanimationtest.h" #include<QPropertyAnimation> CPropertyAnimationTest::CPropertyAnimationTest(QWidget *parent) :QWidget(parent),ui

Mybatis练习(按值单条件查询)

Mybatis练习 安装MybatisX 接下来我们就使用Mybatis完成品牌数据的增删改查操作。以下是我们要完成功能列表&#xff1a; 查询 查询所有数据查询详情条件查询 添加修改 修改全部字段修改动态字段 删除 删除一个批量删除 创建数据库 数据库表&#xff08;tb_brand&#xff09;…

腾讯云服务器CVM和轻量应用服务器区别全方位对比

腾讯云轻量服务器和云服务器有什么区别&#xff1f;轻量应用服务器和云服务器CVM哪个更好&#xff1f;抛开价格及使用门槛&#xff0c;云服务器CVM更好&#xff1b;从性价比及易用性角度考虑&#xff0c;轻量应用服务器更好&#xff0c;轻量服务器性价比高&#xff0c;这个配置…

【Python】批量提取图片经纬度并写入csv文件

需求 无人机图片中往往包含经纬度信息&#xff0c;需要一个脚本批量将文件夹中包含经纬度信息的图片提取出来&#xff0c;保存成csv文件。 经纬度格式解读 默认情况下&#xff0c;图片采用的WGS84经纬度&#xff0c;默认格式采用的是度分秒格式&#xff0c;另一种格式是十进…

【数据结构】二叉树的基本操作与遍历(C语言)

目录 定义 满二叉树 完全二叉树 性质 应用 计算二叉树结点个数 计算叶子结点的个数 第 k 层结点的个数 查找值为x的节点 遍历 前序遍历 中序遍历 后序遍历 层序遍历 判断是否为完全二叉树 定义 &#x1f984;二叉树是由树发展过来的&#xff0c;即度最大为2的树&…

stm32 笔记 PWM及HAL库应用

stm32 PWM原理 STM32 使用一个定时器作为 PWM 输出&#xff0c;在上图中&#xff0c;ARR 即为重装载值。在计数器的值大于CRRx的值并且小于 ARR 之间&#xff0c;即区分高低电平。输出在图中分别有 ① 和 ② 两种情况. 分别为&#xff1a; ①CRR 和 ARR 区间为低电平。 ②CR…

【pen200-lab】10.11.1.222

pen200-lab 学习笔记 【pen200-lab】10.11.1.222 &#x1f525;系列专栏&#xff1a;pen200-lab &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &#x1f36d;作…

Vue框架学习(第十三课)Vuex状态管理中的store和state属性

学习官网文档:开始 | Vuex (vuejs.org) 第一部分:查图观色思考为什么&#xff1f;下面的一张图中的数据如何实现组件与组件之间的数据共享呢&#xff1f; 如何去实现下面的方案呢能让数据得到共享 这一张图告诉你们答案 这样如何实现组件与组件之间的通信呀 Vuex五个核心的基本…

FANUC机器人程序设计

一&#xff0e;注意事项 1.FANUC机器人所有者、操作者必须对自己的安全负责。FANUC不对机器使用的安全问题负责。FANUC提醒用户在使用FANUC机器人时必须使用安全设备&#xff0c;必须遵守安全条款。 2.FANUC机器人程序的设计者、机器人系统的设计和调试者、安装者必须熟悉FAN…

408 考研《操作系统》第一章第一节:操作系统的概念和特征

文章目录教程&#xff1a;1. 操作系统的概念、功能和目标1.1 大家熟悉的操作系统1.2 操作系统的概念1.3 操作系统的功能和目标1.3.1 操作系统的功能和目标——作为系统资源的管理者1.3.2 操作系统的功能和目标——作为用户和计算机硬件之间的接口1.3.3 操作系统的功能和目标——…

【三维目标检测】CenterPoint(二)

CenterPoint数据和源码配置调试过程请参考上一篇博文&#xff1a;https://blog.csdn.net/suiyingy/article/details/128002709。本文主要详细介绍CenterPoint网络结构及其运行中间状态。 1 CenterPoint模型总体过程 CenterPoint模型的整体结构如下图所示&#xff0c;由最初的一…

50 jhat 中 java.lang.String 的实例占用空间为什么是 28 bytes ?

前言 此问题是 多个 classloader 加载的同类限定名的Class 在 jhat 中显示不全d 同一时期发现的问题 大致的情况是 看到了 jhat 中统计的各个 oop 的占用空间 似乎是不太能够对的上 比如 java.lang.String, 在 64bit vm 上面 开启了 UseCompressedOops 之后, 应该是占用 …