微信小程序如何实现再多个页面共享数据

在微信小程序中,实现多个页面共享数据有以下几种常用方式,根据场景选择最适合的方案:

  1. 全局变量(App.js)
    适用场景:简单数据共享(非响应式)
    实现方式:

javascript

// app.js

App({

globalData: {

userInfo: null,

token: ""

}

})

// 任意页面获取/修改

const app = getApp();

app.globalData.token = "new_token"; // 写入数据

console.log(app.globalData.token); // 读取数据

缺点:数据变更不会自动触发页面更新。

  1. 本地缓存(Storage)
    适用场景:持久化数据(如用户登录状态)
    实现方式:

javascript

// 存数据

wx.setStorageSync('key', { name: 'Alice' });

// 取数据(任意页面)

const data = wx.getStorageSync('key');

注意:

同步方法 Sync 结尾,异步用 wx.setStorage

单个 key 最大 1MB,总上限 10MB

用户清除缓存时数据会丢失

  1. 事件总线(EventBus)
    适用场景:跨页面实时通信
    实现方式:

javascript

// app.js 中初始化事件中心

App({

eventBus: new Map(), // 简易版

on(event, callback) {

if (!this.eventBus.has(event)) this.eventBus.set(event, \[\]);

this.eventBus.get(event).push(callback);

},

emit(event, data) {

if (this.eventBus.has(event)) {

this.eventBus.get(event).forEach(cb => cb(data));

}

}

})

// A页面发送事件

const app = getApp();

app.emit('dataUpdate', { newData: 123 });

// B页面监听

app.on('dataUpdate', data => {

console.log('收到数据:', data);

this.setData({ received: data }) // 更新视图

});

优点:解耦页面间通信

缺点:需手动移除监听(可在 onUnload 中处理)

  1. 状态管理库(如 MobX)
    适用场景:复杂应用响应式数据共享
    步骤:

安装依赖:

bash

npm install mobx-miniprogram mobx-miniprogram-bindings

创建 Store:

javascript

// store.js

import { observable, action } from 'mobx-miniprogram';

export const store = observable({

count: 0,

increment: action(function() {

this.count++;

})

});

绑定到页面:

javascript

import { createStoreBindings } from 'mobx-miniprogram-bindings';

import { store } from './store';

Page({

onLoad() {

this.storeBindings = createStoreBindings(this, {

store,

fields: 'count', // 映射数据

actions: 'increment' // 映射方法

});

},

onUnload() {

this.storeBindings.destroy(); // 清理绑定

}

})

在页面中使用:

xml

{{count}}

+1

优点:自动更新视图,适合中大型项目。

  1. 页面传参(URL参数)
    适用场景:简单数据传递到下一页
    实现方式:

javascript

// 页面A跳转

wx.navigateTo({

url: '/pages/pageB?data=' + JSON.stringify({ id: 1 })

})

// 页面B获取

Page({

onLoad(options) {

const data = JSON.parse(options.data);

}

})

限制:只适用于单向传递,数据量不宜过大。

  1. 数据库(云开发)
    适用场景:多端实时同步数据

javascript

// 写入数据

const db = wx.cloud.database();

db.collection('data').add({ data: { value: 100 } });

// 监听数据变化(所有页面)

const watcher = db.collection('data').watch({

onChange: snapshot => console.log('新数据', snapshot)

});

⭐ 方案推荐 ⭐

场景 推荐方案

简单全局数据(如用户信息) App.globalData

需要持久化的数据(如设置项) wx.setStorage

复杂应用状态管理 MobX 等状态库

页面间事件通知 EventBus

实时多端同步 云数据库

重要提示:

对于响应式数据更新,优先选择 MobX 或事件总线

避免滥用全局变量,大型项目用状态管理更易维护

敏感数据(如 token)不要存储在 globalData,用 Storage 加密存储

相关推荐
DS小龙哥7 分钟前
从呼吸心率到离床报警:60G雷达睡眠仪全栈开发实录(硬件+MQTT+小程序)DIY一台全功能睡眠监护仪
stm32·单片机·嵌入式硬件·物联网·小程序·智能家居
扶风ff3 小时前
练题簿在线免费刷题:刷题、背题、错题复习,一个小程序安排日常备考
学习·小程序
扶风ff3 小时前
练题簿在线免费刷题:共享题库、学习任务、在线考试,岗位培训更方便
学习·小程序
愚公搬代码4 小时前
【愚公系列】《微信小程序项目实战(AI编程+视频图解)》014-莫凡商城小程序项目视图容器组件的应用
微信小程序·小程序·ai编程
星光开发者19 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
程xu袁19 小时前
只有一段副歌,AI写歌选小程序、Suno还是海绵音乐?
小程序·suno·ai音乐·ai音乐工具·ai生成音乐·ai写歌工具
专业程序开发源1 天前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
QQ_21696290961 天前
基于微信小程序的智能膳食分析系统
java·大数据·spring boot·微信小程序·小程序·旅游
QQ_21696290961 天前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
扶风ff2 天前
求职笔试资料太散?用练题簿在线刷题,按岗位整理练习清单
前端·学习·小程序