{"id":13511378,"url":"https://github.com/imtaotao/mp-store","last_synced_at":"2025-06-21T01:37:10.663Z","repository":{"id":94204415,"uuid":"207769438","full_name":"imtaotao/mp-store","owner":"imtaotao","description":"轻量级的小程序状态管理库","archived":false,"fork":false,"pushed_at":"2020-04-13T07:00:45.000Z","size":1044,"stargazers_count":56,"open_issues_count":2,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-01T03:53:32.778Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imtaotao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-09-11T09:04:01.000Z","updated_at":"2024-04-12T19:33:40.000Z","dependencies_parsed_at":"2023-09-01T04:19:37.923Z","dependency_job_id":null,"html_url":"https://github.com/imtaotao/mp-store","commit_stats":{"total_commits":179,"total_committers":1,"mean_commits":179.0,"dds":0.0,"last_synced_commit":"12a33c07b90469eb2bf757dd0ad1ac1a26faad8f"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imtaotao%2Fmp-store","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imtaotao%2Fmp-store/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imtaotao%2Fmp-store/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imtaotao%2Fmp-store/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imtaotao","download_url":"https://codeload.github.com/imtaotao/mp-store/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223629045,"owners_count":17176061,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T03:00:48.758Z","updated_at":"2024-11-08T04:03:16.228Z","avatar_url":"https://github.com/imtaotao.png","language":"JavaScript","funding_links":[],"categories":["mini-programe"],"sub_categories":[],"readme":"## mp-store\r\n[![Build status](https://travis-ci.org/imtaotao/mp-store.svg?branch=master)](https://travis-ci.org/imtaotao/mp-store)\r\n[![Coverage](https://img.shields.io/codecov/c/github/imtaotao/mp-store/master.svg)](https://codecov.io/github/imtaotao/mp-store?branch=master)\r\n[![NPM version](https://img.shields.io/npm/v/@rustle/mp-store.svg?style=flat-square)](https://www.npmjs.com/package/@rustle/mp-store)\r\n[![QQ group](https://img.shields.io/badge/QQ群-624921236-ff69b4.svg?maxAge=2592000\u0026style=flat-square)](https://shang.qq.com/wpa/qunwpa?idkey=fcb17d938fab0e30e879dd96421d91e24805e0bc1077022ff5ae562b732a2508)\r\n\r\n```\r\nnpm install @rustle/mp-store\r\n```\r\n一个轻量级的微信小程序状态管理库，他将能够平滑的兼容以前的旧项目，并不会有很强的侵入性，所以你可以直接迁移过来。如果你的小程序没有引入 `npm` 包的功能，可以在[这里](https://cdn.jsdelivr.net/gh/imtaotao/mp-store/dist/mpstore.esm.js)下载，然后放到项目中去。\r\n\r\n\u003e [更新日志](https://github.com/imtaotao/mp-store/releases)\r\n\r\n## Usage\r\n这是一个简单的的迁移 demo\r\n```js\r\n// 只需要两行代码，你就可以使用 mp-store 了\r\n// 如果不想使用，也不会对你原有的项目产生影响\r\nimport createStore from '@rustle/mp-store'\r\nconst store = createStore()\r\n\r\nApp({\r\n  // ...\r\n})\r\n```\r\n\r\n下面是一个完整的使用 demo，更具体的使用，可以看相关部分的具体介绍\r\n1. 创建 `reducer`\r\n```js\r\nstore.add('action', {\r\n  partialState: {\r\n    name: 'tao',\r\n  },\r\n  setter (state, payload) {\r\n    return { name: payload }\r\n  }\r\n})\r\n```\r\n\r\n2. 在 `Page` 和 `Component` 中使用\r\n```js\r\n// mp-store 对 page 和 component 无差别对待\r\nPage({\r\n  storeConfig: {\r\n    useState: store =\u003e ({\r\n      name: state =\u003e state.name \r\n    })\r\n  },\r\n\r\n  onLoad () {\r\n    this.data.global.name // tao\r\n  },\r\n\r\n  // 更改\r\n  change () {\r\n    this.store.dispatch('action', 'chentao')\r\n    this.data.global.name // chentao\r\n  },\r\n})\r\n```\r\n\r\n如果你使用了模块，则会稍微有一点不同，看下面的 demo\r\n1. 创建 `reducer`\r\n```js\r\n// 定义全局的 state\r\nstore.add('global', {\r\n  partialState: {\r\n    age: 25,\r\n  },\r\n})\r\n\r\n// 模块\r\nconst action = 'action'\r\nconst reducer =  {\r\n  partialState: {\r\n    name: 'tao',\r\n  },\r\n  setter (state, payload) {\r\n    return { name: payload }\r\n  },\r\n}\r\n\r\nstore.addMoudle('user', {\r\n  [action]: reducer,\r\n})\r\n```\r\n\r\n2. 在 `Page` 和 `Component` 中使用\r\n```js\r\n// useState 是一个数组，第一个参数为需要注入的 module\r\nPage({\r\n  storeConfig: {\r\n    useState: store =\u003e ['user', {\r\n      name: module =\u003e module.name,\r\n      age: (module, rootState) =\u003e rootState.age\r\n    }]\r\n  },\r\n\r\n  onLoad () {\r\n    this.data.global.age // 25\r\n    this.data.global.name // tao\r\n  },\r\n\r\n  // 更改\r\n  change () {\r\n    this.store.dispatch('action', 'chentao')\r\n    this.data.global.name // chentao\r\n  },\r\n})\r\n```\r\n\r\n## [store 的介绍](https://github.com/imtaotao/mp-store/blob/master/docs/store.md)\r\n## [storeConfig 的介绍](https://github.com/imtaotao/mp-store/blob/master/docs/component.md)\r\n## [module 的介绍](https://github.com/imtaotao/mp-store/blob/master/docs/module.md)\r\n## [middleware 的介绍](https://github.com/imtaotao/mp-store/blob/master/docs/middleware.md)\r\n## [time travel 的介绍](https://github.com/imtaotao/mp-store/blob/master/docs/time-travel.md)\r\n## [mixin 的介绍](https://github.com/imtaotao/mp-store/blob/master/docs/mixin.md)\r\n## [hooks 的介绍](https://github.com/imtaotao/mp-store/blob/master/docs/hooks.md)\r\n## [data diff 的原理](https://github.com/imtaotao/mp-store/blob/master/docs/diff.md)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimtaotao%2Fmp-store","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimtaotao%2Fmp-store","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimtaotao%2Fmp-store/lists"}