# wxMiniStore **Repository Path**: wu_mingwei/wxMiniStore ## Basic Information - **Project Name**: wxMiniStore - **Description**: 一个基于微信小程序的mini全局状态管理库 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-04-09 - **Last Updated**: 2024-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wxMiniStore [![NPM version](https://img.shields.io/npm/v/wxministore.svg)](https://www.npmjs.com/package/wxministore) 一个基于原生小程序的mini全局状态管理库,五行代码即可引入。 * 全局状态state支持所有Page和Component,状态完全同步,并提供api,自动diff状态并更新。 * 周期监听pageLisener能监听所有页面的onLoad,onShow等周期事件。 * 全局事件methods,全局可用的方法。 * 适合原生小程序,可以随时引入,不影响原有的业务,拓展性强。 ## 更新日志 ### 1.2.8 \[2019.11.27\] `F`: 优化diff能力。 ### 1.2.7 \[2019.9.6\] `F`: 修复删除state中的数组,删除的项会为null的问题。 ### 1.2.6 \[2019.6.26\] `A`: 新增[store.prototype.getState](#state),用于读取store.$state的拷贝,防止对原状态进行误操作。 ### 1.2.5 \[2019.6.25\] `F`: 修复setState为引用类型数据时视图可能不会更新。 完整日志[点击此处查看](https://github.com/yx675258207/wxMiniStore/issues/9) ### 导航 * [全局状态开始](#start) * [安装及引入](#start-1) * [实例化](#state) * [App中注入](#start-3) * [页面上使用](#start-4) * [修改状态](#start-5) * [修改状态注意事项](#start-6) * [页面周期监听](#lisener) * [全局方法](#f) * 性能优化 * [局部状态模式](#part) * [useProp](#useProp) * [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