小程序全局状态还能这么简单?只需初始化一次,页面自动同步

最近在小程序项目里,经常会遇到一些需要跨页面共享的数据,例如用户信息、购物车数量、订单筛选条件等。

这些数据通常不大,引入一套完整状态管理方案又有些重,所以我写了一个轻量的小程序状态管理工具 miniprogram-state。

它的使用思路很简单:在 app.js 中初始化一次,之后页面可以直接通过 miniState 使用共享数据。修改状态后,页面会自动同步,无需在每个页面重复注册或手动刷新。

一、初始化共享数据

在 app.js 中引入并初始化:

php 复制代码
import { initState } from "miniprogram-state";

initState({
  userInfo: {
    name: "小明",
    avatar: "",
  },
  cart: {
    count: 0,
    list: [],
  },
});

App({});

这里的数据主要适合用户信息、购物车、页面筛选条件等小体量共享状态。

二、页面直接使用

页面不需要额外配置,WXML 可以直接读取:

sql 复制代码
<view>用户名:{{miniState.userInfo.name}}</view>
<view>购物车:{{miniState.cart.count}}</view>

需要修改状态时,在页面 JS 中引入默认导出的状态对象:

javascript 复制代码
import miniState from "miniprogram-state";

Page({
  changeName() {
    miniState.userInfo.name = "小红";
  },

  addCart() {
    miniState.cart.count++;
  },
});

对象属性修改以及数组的 push、splice 等操作,都可以触发页面数据同步:

php 复制代码
miniState.cart.list.push({
  id: 1,
  name: "示例商品",
});

三、组件中使用

页面向组件传入 miniState:

ini 复制代码
<goods-card miniState="{{miniState}}" />

组件声明对应属性后即可读取:

css 复制代码
Component({
  properties: {
    miniState: Object,
  },
});

组件 WXML:

sql 复制代码
<view>{{miniState.userInfo.name}}</view>

这个方案主要追求简单直接,不包含持久化、异步请求、登录流程等额外能力,只负责小程序内的轻量状态共享。

目前已经发布到 npm,包名是 miniprogram-state,欢迎有类似需求的开发者试用,也欢迎交流更合适的小程序状态管理思路。

相关推荐
用户818618028001 小时前
RESTful API 设计规范与版本演进
前端
补码缩写1 小时前
前端AVIF编码开多线程快两三倍,speed调到8就不快了
前端
cidy_981 小时前
企业级 AI Agent 工作台前端实战教程
前端
deli0071 小时前
换个 DNS 网速真的变快吗?解析 6 步逐跳实测,快慢差 45 倍
前端
andrsted1 小时前
练题簿助学教学:在线刷题、随堂考试,让一门课拥有自己的题库
学习·微信小程序·小程序·学习方法·刷题
葡萄城技术团队1 小时前
接一个前端库:以前要啃几天文档,现在三步——活字格 V12.1 AI辅助开发上手
前端
愿得一猪蹄1 小时前
浏览器开发者工具隐藏技巧,你可能只用了一成
前端
daols881 小时前
vue 甘特图组件 vxe-gantt 修改滚动条样式-让滚动条自动隐藏
javascript·vue.js·甘特图
高晶2 小时前
ARM 嵌入式 Linux 内核编译与结构解析实战
前端·架构