微信小程序如何實現再多個頁面共享數據

在微信小程序中,實現多個頁面共享數據有以下幾種常用方式,根據場景選擇最適合的方案:

  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 加密存儲

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87476.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87476.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PCIE5.0 TAG說明(ima回答)

在PCIe 5.0規范中,TLP(Transaction Layer Packet)報文的Tag字段用于標識和管理事務。以下是關于Tag的生成和使用規則和定義的詳細描述: Tag字段的定義 Tag字段:位于TLP報文的Header中,占用8位&#xff08…

Type-C PD快充協議智能芯片S312L詳解

1. 芯片概述 S312L 是一款智能Type-C PD協議觸發芯片,支持**PD3.0(含PPS)**及多種A口快充協議(如QC/PE等),可自動識別并申請5V/9V/12V電壓,適用于快充適配器、移動電源等場景。 核心優勢&…

stm32學到什么程度可以找工作?

我重新為你寫一篇更加詳細深入的回答: STM32學到什么程度可以找工作?一個十年老兵的血淚史 寫在前面的話:這些年踩過的坑,都是血淋淋的教訓 剛看到這個問題,我就想起了2014年那個炎熱的夏天。 當時我剛從廈門某馬離…

基于 Elasticsearch 實現地圖點聚合

在地圖類應用中,當需要展示大量地理興趣點時,直接將所有點渲染在地圖上會導致視覺混亂,影響用戶體驗。為此,我基于 Elasticsearch 提供的 geotile_grid 和 geo_bounding_box 查詢能力,實現了一套高效的 POI 聚合展示方…

【Prometheus 】通過 Pushgateway 上報指標數據

Prometheus 是目前最流行的開源監控系統之一,其拉取(pull)模型非常適合服務發現和靜態目標的監控。然而,在某些場景下,例如短生命周期任務、批處理作業或無法暴露 HTTP 接口的服務,傳統的拉取方式并不適用。…

服務器 - - QPS與TPS介紹

1、QPS(Queries Per Second 每秒查詢數) 定義:常用于表示每秒的請求次數,衡量接口請求、數據庫查詢等動作的吞吐量(單位時間內處理的數據量) 計算:總請求數/請求時間,如&#xff1…

Cot2:思維鏈提示激發大型語言模型的推理能力

摘要 我們探討了生成思維鏈——一系列中間推理步驟——如何顯著提升大型語言模型執行復雜推理的能力。特別地,我們展示了在足夠大的語言模型中,這種推理能力如何通過一種簡單的方法——思維鏈提示(chain-of-thought prompting)自…

go交易數據后端

地址 https://gitee.com/EEPPEE_admin/go-stock-line-trading-datahttps://github.com/jerryshell/midas 需求 為了替代rust后端爬蟲端: 爬取東方財富數據到index-data目錄server端: 項目主要內容 todo 替代https://github.com/jerryshell/midas的前端量化概念性理解擴展: 存儲…

靈巧手概覽

第一章 靈巧手的技術演進與核心價值 1.1 技術演進的五個階段 仿生學啟蒙階段(1960-1980) 1968年斯坦福大學首臺3自由度機械夾爪標志機器人操作技術開端,1973年MIT提出"仿生手"概念,但受限于材料和控制技術,…

在設計提示詞(Prompt)時,關于信息位置的安排z怎么 結合模型特性和任務目標

在設計提示詞(Prompt)時,關于信息位置的安排z怎么 結合模型特性和任務目標 在設計提示詞(Prompt)時,關于信息位置的安排確實需要結合模型特性和任務目標。從自注意力機制的原理及應用場景來看,關鍵信息的位置選擇需遵循以下啟示,并結合具體場景靈活調整: 一、核心啟示…

七、性能優化

目錄 1. 如何檢測Flutter應用的性能問題?2. 什么是重繪邊界(Repaint Boundary)?3. 如何避免不必要的重建?4. const 構造函數在優化中起什么作用?5. 如何優化長列表的性能?6. 如何減少應用啟動時…

Webpack優化詳解

Webpack 5提供了一系列工具和功能,可以在本地開發和線上構建過程中進行優化,以提高開發效率和構建性能。 1. 本地開發優化 1.1. 開啟模塊熱替換(HMR) 模塊熱替換可以在不刷新整個頁面的情況下更新模塊,提高開發效率。 const webpack = require(webpack);module.export…

latency 對功耗的影響

文章目錄 1、Connection Interval(連接間隔) vs. Latency(從機延遲)2、為什么不能完全依賴 Connection Interval?3、什么時候可以不用 Latency?4、如何正確配置?5、結論調節連接間隔(Connection Interval)確實可以直接影響通信頻率和功耗,但 Latency(從機延遲)仍然…

10分鐘搭建 PHP 開發環境教程

下載、安裝 Xserver 下載 php 過程中如果提示需要安裝 vc 運行環境,按照引導下載安裝即可 安裝 nginx 安裝 Mysql 支持多個版本同時安裝 下載 php 過程中如果提示需要安裝 vc 運行環境,按照引導下載安裝即可mysql 默認用戶名為 root,默認密…

設計模式(六)

備忘錄模式(Memento Pattern)詳解 一、核心概念 備忘錄模式允許在不破壞封裝性的前提下,捕獲并保存對象的內部狀態,以便后續恢復。該模式通過三個角色實現: 原發器(Originator):需…

迪杰斯特拉算法之解決單源最短路徑問題

迪杰斯特拉算法 迪杰斯特拉(Dijkstra)算法是典型**最短路徑算法**,用于計算一個結點到其它結點的最短路徑。它的主要特點是以起始點為中心向外擴展(利用廣度優先搜索思想),直到擴展到終點。迪杰斯特拉(Dijkstra)算法最佳應用-最短路徑 戰爭時期&#xf…

風平浪靜、無事發生

2025年7月4日,16~25℃,陰雨緊急不緊急重要1.備考D1.物理備課不重要遇見:風平浪靜、無事發生!感受或反思:體檢的結果收到了,醫生建議多吃綠蔬多喝水!多運動,少和喝飲料........

QtitanRibbon打造現代辦公軟件新體驗:提升效率的專業界面解決方案

在現代辦公環境中,無論是日常公文處理、文檔編輯、任務協同還是數據分析,桌面辦公軟件仍扮演著不可替代的角色。然而,許多傳統系統依舊使用菜單繁雜、圖標混亂、交互老舊的界面,用戶操作效率低、上手慢、滿意度差。 QtitanRibbon…

MSPM0G3507學習筆記(一) 重置版:適配逐飛庫的ti板環境配置

由于使用逐飛庫,很多東西其實都不用配置了,也不需要自己移植空工程了,于是寫一個重置版的環境配置教程。 1.下載芯片支持包 MSPM0G3507芯片支持CCS、IAR、KEIL等IDE,選擇KEIL作為開發工具,首先安裝芯片支持包。 前往…

如何查看自己電腦的顯卡信息?

右鍵單擊底部導航欄選擇“任務管理器” 點開之后 選擇左側的性能一欄 查看你的顯卡的信息