小程序中使用 Vue2 + Vuex 实现数据存储与获取

server/2024/12/21 18:25:09/

小程序开发中,数据的存储与获取是一个非常重要的环节。本文将介绍如何在小程序中使用 Vue2 和 Vuex 实现数据的存储与获取。我们将通过一个具体的例子来展示如何在 Vuex 中管理用户信息和机构信息,并在组件中使用这些数据。

项目结构

首先,我们来看一下项目的基本结构:

src/
├── common/
│   └── api.js
├── store/
│   ├── index.js
│   └── modules/
│       └── user.js
├── components/
│   └── InstitutionPicker.vue
├── pages/
│   ├── Mine/
│   │   └── Mine.vue
│   └── Index/
│       └── Index.vue
└── App.vue

Vuex 模块化管理

我们将用户信息和机构信息的管理放在 store/modules/user.js 文件中。以下是 user.js 文件中与机构相关的代码:

import api from '@/common/api.js';
import * as mutation from '../mutations.js';export default {namespaced: true,state: {institutions: [], // 机构信息列表selectedInstitution: {}, // 当前选中的机构信息stuName: '' // 添加 stuName 到 state},getters: {// 获取当前选中的机构信息selectedInstitution(state) {return state.selectedInstitution;},// 获取所有机构信息institutions(state) {return state.institutions;},// 获取学生名stuName(state) {return state.stuName;}},mutations: {// 设置机构信息[mutation.SET_INSTITUTIONS](state, institutions) {state.institutions = institutions;state.selectedInstitution = institutions[0]; // 默认选中第一个机构},// 设置当前选中的机构信息[mutation.SET_SELECTED_INSTITUTION](state, institution) {state.selectedInstitution = institution;state.stuName = institution.stu_name; // 更新 stuName// 保存到本地存储wx.setStorageSync('selectedInstitution', institution);}},actions: {// 获取机构信息,接受参数getInstitutions({ commit }, tal_id) {return new Promise((resolve, reject) => {api.postInstitutions({ tal_id }).then(res => {commit(mutation.SET_INSTITUTIONS, res.list);resolve(res.list);}).catch(err => {reject(err);});});},// 设置当前选中的机构信息setSelectedInstitution({ commit }, institution) {commit(mutation.SET_SELECTED_INSTITUTION, institution);}}
};

组件中使用 Vuex 数据

Mine 组件(个人中心组件)

注意:index组件(主页面)用法与Mine组件类似

Mine.vue 组件展示了如何在组件中使用 Vuex 数据,并通过 actions 获取和设置数据。

<template><view><div class="school-details" @click="toggleInstitutionList">// 其他实现逻辑,比如数据展示等</div>
<InstitutionPicker :show="showInstitutionList" @confirm="selectInstitution" @close="toggleInstitutionList" /></view>
</template>
import { mapGetters, mapActions } from 'vuex';export default {components: {InstitutionPicker // 引入子组件名称},data() {return {showInstitutionList: false, // 控制机构列表显示隐藏};},computed: {...mapGetters('user', ['selectedInstitution', 'institutions', 'stuName']) // 获取本地数据},mounted() {this.fetchInstitutions(); // 获取机构信息},methods: {...mapActions('user', ['getInstitutions', 'setSelectedInstitution']),// 获取机构信息fetchInstitutions() {const tal_id = uni.getStorageSync("talId");this.getInstitutions(tal_id).then(res => {// 获取本地存储的选中机构信息const storedInstitution = wx.getStorageSync('selectedInstitution');if (storedInstitution) {this.setSelectedInstitution(storedInstitution);}})},// 切换机构列表显示隐藏toggleInstitutionList() {this.showInstitutionList = !this.showInstitutionList;},// 选择机构selectInstitution(institution) {this.setSelectedInstitution(institution);wx.setStorageSync('selectedInstitution', institution);this.showInstitutionList = false;}}
};

InstitutionPicker 组件

注意:使用参照Mine组件<script>部分

InstitutionPicker.vue 组件展示了如何在子组件中使用 Vuex 数据,并通过 props 接收父组件传递的数据。(主要按需展示数据、选中emit确定事件和取消事件)

<template><view class="pickerCss"><u-picker :show="show" :columns="[formattedInstitutions]" @confirm="confirm" keyName="displayName" immediateChange:defaultIndex="[defaultIndex]" @cancel="closeSelectDate" class="picker"></u-picker></view>
</template>

大致效果 

登录后单选且必选(主页面)

选中后主页展示相关信息

我的页面展示存储数据(可切换信息,切换之后主页面相关信息同步修改)

总结

通过以上示例,我们可以看到在小程序中使用 Vue2 和 Vuex 实现数据存储与获取的基本步骤:

  1. 定义 Vuex 模块:在 store/modules 目录下定义 Vuex 模块,管理相关的 state、getters、mutations 和 actions。
  2. 在组件中使用 Vuex 数据:通过 mapGetters 和 mapActions 将 Vuex 的 state 和 actions 映射到组件的 computed 和 methods 中。
  3. 使用本地存储:在需要持久化数据的地方使用 wx.setStorageSync 和 wx.getStorageSync 进行本地存储和读取。

通过这种方式,我们可以更好地管理小程序中的数据,提升代码的可维护性和可读性。


http://www.ppmy.cn/server/152009.html

相关文章

鸿蒙学习笔记:用户登录界面

文章目录 1. 提出任务2. 完成任务2.1 创建鸿蒙项目2.2 准备图片资源2.3 编写首页代码2.4 启动应用 3. 实战小结 1. 提出任务 本次任务聚焦于运用 ArkUI 打造用户登录界面。需呈现特定元素&#xff1a;一张图片增添视觉感&#xff0c;两个分别用于账号与密码的文本输入框&#…

搭建一个简单的Web服务器(Apache2.4)

一、下载安装包 Apache服务器的官方下载地址&#xff1a;http://httpd.apache.org windows系统的安装软件下载地址&#xff1a;https://www.apachelounge.com/download/ 下载的是免安装的版本&#xff1a;httpd-2.4.62-240904-win64-VS17.zip 解压后将 Apache24 拷贝到 D 盘&…

c++ 找第一个只出现一次的字符

【题目描述】 给定一个只包含小写字母的字符串&#xff0c;请你找到第一个仅出现一次的字符。如果没有&#xff0c;输出no。 【输入】 一个字符串&#xff0c;长度小于100000。 【输出】 输出第一个仅出现一次的字符&#xff0c;若没有则输出no。 【输入样例】 abcabd【输出样…

Android 折叠屏问题解决 - 展开后布局未撑开

一、说明 正常情况下手机展开折叠时页面会销毁重建&#xff0c;但可以通过参数设置禁止销毁重建。 android:configChanges"orientation|screenSize|screenLayout|smallestScreenSize" 但设定完后发现 RecyclerView 中的 item 没有重新按照新的尺寸进行改变&#x…

ASR-LLM-TTS 实时语音对话助手:语音识别、大模型对话、声音生成

参考:https://blog.csdn.net/weixin_42357472/article/details/137020794 asr:funasr-SenseVoiceSmall 离线 llm:deepseek 在线api tts:edge-tts 在线api import pyaudio import wave import threading import numpy as np import time from queue import Queue import web…

1 软件工程学概述

一、软件危机 1.什么是软件危机 软件危机是指计算机软件的开发和维护过程中所遇到的一系列严重问题。 2.软件危机的典型表现 对软件开发成本和进度估计尝尝很不准确用户对“已完成的”软件系统不满意的现象经常发生软件产品的质量往往靠不住软件常常是不可维护的软件通常没有…

elasticsearch Flattened 使用

在 Elasticsearch 中&#xff0c;flattened 类型是一种特别设计的字段类型&#xff0c;用于存储具有不规则结构的 JSON 数据。与 nested 类型不同&#xff0c;flattened 类型将嵌套的 JSON 对象展平&#xff08;即将嵌套对象的字段变成一级字段&#xff0c;字段名以“点”分隔&…

智能座舱进阶-应用框架层-Handler分析

首先明确&#xff0c; handler是为了解决单进程内的线程之间的通信问题的。我也需要理解Android系统中进程和线程的概念&#xff0c; APP启动后&#xff0c;会有三四个线程启动起来&#xff0c;其中&#xff0c;有一条mainUITread的线程&#xff0c;专门用来处理UI事件&#xf…