npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

minax

v0.4.2

Published

微信小程序状态管理工具,类vuex调用风格,响应式数据更新

Downloads

16

Readme

Minax是什么?

Minax是一个专为小程序开发的状态管理库,它采用集中式存储管理应用的所有组件的状态, 并能够配置是否与缓存做绑定,使用方式类似于Vuex。通常可以用来解决多个视图共享同一 状态或者多个视图需要变更同一状态的场景。

我们的优势

  • 全局状态state支持App、Page、Component、Behavior(这一点强于市面上其他的库)
  • 使用方式类似于Vuex,有相关经验的同学上手会比较容易
  • 代码侵入小,集成简单,不需要在每个页面调用getApp(),直接this.$store....
  • 支持与缓存无感知绑定(可选项),从此与Storage说拜拜

小程序支持情况

得益于各个小程序提供平台的相互借鉴,使得我们的库能够支持几乎市面上所有的小程序 (如果需要支持其他小程序,您只需要在集成本库后做少量修改),本文档所涉及案例均以微信小程序为例

  • 微信小程序
  • 支付宝小程序
  • 百度小程序
  • 京东小程序
  • 头条小程序

安装

以微信小程序为例,小程序从基础库2.2.1开始支持npm, 文档链接, 使用该插件时建议将您的版本升至2.2.1以上

2.2.1以下版本引入方式

针对2.2.1以下基础库版本,请将本库的dist目录复制到您的项目中,然后适用require或者import的方式引用即

var Store = require('../dist/index.js') // 具体的路径根据您的文件目录做调整

或者

import Store from '../dist/index.js' // 具体的路径根据您的文件目录做调整

2.2.1及以上版本库的引入方式

由于小程序的文件夹默认不采用npm的形式,所以第一步需要将小程序项目初始化成npm项目

npm init

然后根据你的包管理工具使用

npm install --save minax

或者

yarn add minax

安装成功后,点击开发者工具中的菜单栏:工具 --> 构建 npm build

勾选“使用 npm 模块”选项:

build

构建完成后即可使用 npm 包,js 中引入 npm 包:

const Store = require('minax')

开始

Minax库的核心就是store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state以及action)。

Minax 和单纯的全局对象有以下两点不同:

  1. Minax 的状态存储是基于发布订阅模式的,当页面或组件中设置了 mapState 时,相当于向store订阅了该状态,若 store 中的状态发生变化,那么相应的组件、页面也会相应地得到高效更新。

  2. 你不能直接改变 store 中的状态,改变 store 中的状态的唯一途径就是显式地提交发布 (commit),这样使得我们可以方便地跟踪每一个状态的变化。

一个简单的store

我们建议在项目内建一个store/index.js文件,一个简单的store编写如下:

import Store from '../dist/index.js'

const store = new Store({
  state: {
    cartCount: 0,
    mark: ''
  },
  action: {
    setmark({commit}, payload) {
      setTimeout(() => {
        commit('mark', payload)
      }, 2000) 
    }
  }
})
export default store

现在,你可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更:

store.commit('mark', '这是一条备注信息')

console.log(store.state.mark) // -> '这是一条备注信息'

在项目的app.js中,将store引入

import store from './store/index.js'
store.install()

在Page、Component、Behavior中配置mapState属性,其对应的值为一个字符串或者字符串数组 mapState: ['cartCount', 'mark'], 或者 mapState: 'cartCount',经mapState处理过的属性等效于设置在data中的值,您可以通过this.data.cartCount获取,也可以通过this.$store.state.cartCount获取

Page({
  data: {
    info: '我是首页'
  },
  mapState: ['cartCount', 'mark'],
  onLoad: function() {
    // 数量加1
    this.$store.commit('mark', '这是一条备注信息')
    this.$store.dispatch('setmark', '这是一条由action触发的备注信息')
  }
})

在wxml中,直接绑定该值既可

<view class="mark">备注:{{mark}}</view>

看到这里,你应该已经基本掌握本库的使用了

相关构造参数

state

state是Minax的全部状态源,我们通过在state中设置的key来绑定状态,其有两个特性:

  1. 每个key对应一个状态,这些状态最终通过mapState混入到页面或组件的data中,所以其值和data中的值准遵循同样的规则
  2. 这里的key会作为commit的type使用,例如store.commit(type, payload)
new Store({
    state: {
         mark: 'default'   
    }
})

bindStorageMode

Minax支持于缓存绑定的模式,初始化时传入bindStorageMode: Boolean即可,这一点你只需要知道即可,因为你无需操作缓存,这一切都由store帮你做好,初始化时会自动读取,更新时会自动写入,而你要做的只是在bindStorageMode等于true时,配置state的持久化属性即可

export default new Store({
  // 绑定缓存模式时,state入参不太一样
  bindStorageMode: true,
  state: {
    cartCount: {
      persistence: true,
      default: 0 // 真正的值在这里
    },
    mark: {
      persistence: true,
      default: ''
    }
  }
})

action

action通常用于处理异步事务(你实在要同步使用我也没办法)

PS:另一个能用到action的地方是,当你希望设置某个全局方法,并用其更新状态时

import Store from '../dist/index.js'

export default new Store({
   action: {
     setmark({commit}, payload) {
       setTimeout(() => {
         commit('mark', payload)
       }, 2000) 
     }
   }
})

使用时

this.$store.dispatch('setmark')

好啦,暂时先到这里,你可以愉快的coding啦