# wxMiniStore **Repository Path**: BroTeam/wx-mini-store ## Basic Information - **Project Name**: wxMiniStore - **Description**: 一个基于原生小程序的 mini 全局状态管理库,跨页面/组件数据共享渲染。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-07-27 - **Last Updated**: 2023-07-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wxMiniStore [![NPM version](https://img.shields.io/npm/v/wxministore.svg)](https://www.npmjs.com/package/wxministore) [![License](https://img.shields.io/npm/l/wxministore.svg)](https://www.npmjs.com/package/wxministore) 一个基于原生小程序的 mini 全局状态管理库,跨页面/组件数据共享渲染。 - 全局状态 state 支持所有 Page 和 Component,更新时使用独有 diff 能力,性能更强。 - 周期监听 pageListener 能监听所有页面的 onLoad、onShow 等周期事件,方便埋点、统计等行为。 - 全局事件 methods,一处声明,所有 wxml 直接可用的函数。 - 适合原生小程序,即使后期引入,也只需增加几行代码。 ## 更新日志 ### 1.3.1 \[2021.1.13\] `U`:优化pageListener中的onShareAppMessage能力,使其支持自定义[全局分享](#share)。 ### 1.3.0 \[2020.7.28\] `A`:新增 [store.prototype.clearState](#clearState) 清除状态,by [@zkl2333](https://github.com/zkl2333) `F`:新增polyfill,修复 [#25](https://github.com/xiaoyao96/wxMiniStore/issues/25)。 `F`:单词错误 pageLisener 改为 pageListener(已做向下兼容可放心升级)。 ### 1.2.9 \[2020.3.31\] `A`: 新增[debug 字段](#other),用于开启/关闭 setState 时的 console。 ### 导航 - [全局状态开始](#start) - [安装及引入](#start-1) - [实例化](#state) - [App 中注入](#start-3) - [页面上使用](#start-4) - [修改状态](#start-5) - [修改状态注意事项](#start-6) - [页面周期监听](#lisener) - [全局分享](#share) - [全局方法](#f) - 性能优化 - [局部状态模式](#part) - [useProp](#useProp) - [其他](#other) - [non-writable 解决方案](#nonWritable) - [Api 说明](#api) - [总结及建议](#end) ##
开始
在开始前,你可以 clone 或下载本项目,用微信开发工具打开 demo 目录来查看效果。 ###
1.安装及引入
目前有两种引入方式: #### npm 首先你需要 npm init 在项目目录下生成 package.json 后,再进行安装。 ```cmd npm init npm install wxministore -S ``` 然后在微信小程序右上角详情中勾选 `使用npm模块`。 接着选择左上角 工具-构建 npm。 这样你就可以在项目中导入了。 ```js //app.js中 import Store from "wxministore"; //或者 const Store = require('wxministore'); App({}); ``` #### clone 如果不太熟悉 npm 没关系,你可以将本项目中 lib/store.js 复制到你的项目中,并在`app.js第一行`引入: ```js //app.js中 import Store from "./util/store.js"; //或者 const Store = require('./util/store.js'); App({}); ``` ###
2. 实例化一个全局状态 state
Store 为构造函数,所以需要通过 new 关键字实例化,参数为 object 类型,下面我们初始化一个 state。 ```js let store = new Store({ state: { msg: "这是一个全局状态", user: { name: "李四", }, }, }); console.log(store.getState().msg); //这是一个全局状态 1.2.6+ console.log(store.$state.msg); //这是一个全局状态 (不推荐) App({}); ``` 初始化完成,我们如需在 js 中获取状态,可使用 `store.getState()` 获取全局状态,`1.2.6+`版本强烈推荐此方式。 store.\$state 也可获取,但不建议使用。 ###
3.在 App 中注入 store
这么做是为了在其他页面中使用 store。 ```js App({ onLaunch: function () {}, store: store, }); ``` ###
4.页面上使用
在所有 wxml 中,可使用$state.x。 其中$state 为全局状态的容器,里面包含了所有的全局状态。 ```html {{$state.user.name}}:{{$state.msg}} ``` 显示为 李四:这是一个全局状态。 如果在 template 文件中使用,需在属性 data 中引用\$state ```html