English | 简体中文
基于 redux
、redux-thunk
的超轻量级(核心代码仅5KB)的数据状态管理方案。(Inspired by dva )
竜神の剣を喰らえ! -- 島田源氏
- 使用命名空间分隔不同业务,并将同一命名空间下所有的数据处理逻辑集中在同一处,方便数据统一管理,提供模块的可插拔体验。
- 增强
redux
的actionCreator
,提供友好的存取数据方法,使用户无需重复手写reducer
,统一同步与异步更新state
的操作体验。 - 内置异步操作
loading
状态,更方便的获取当前操作进度。
如果你使用 npm
作为包管理工具,在项目目录下,执行以下命令:
npm install --save genjijs
如果你使用 yarn
,也可以:
yarn add genjijs
本项目内置使用示例,见这里。使用了 Genji
的所有常用特性。
另外,下面的 demo
也许能帮助你更快地熟悉 Genji
:
-
example-typescript:如果你想拥有完整的
Typescript
支持,可以参考这个项目。 -
TodoList:一个模仿Redux官方给出的TodoList。(Redux官网示例传送门)
dva
是一个在全球范围内都十分优秀的开源项目,也是本项目的灵感来源(这从项目名上就可以看出hhh),在此特别致谢。
在 dva
项目中使用了 redux-saga
作为异步解决方案,这使得开发者不得不使用 generator
的方式进行异步请求,这和 async
与 Promise
结合的主流异步调用方式不同,可能会对新手开发者造成一些困惑。因此,在 Genji
中采用了 Redux
的作者 Dan
本人写的 redux-thunk
作为异步解决方案。
考虑到 redux-saga
所带来的用户习惯与功能增强,我们通过劫持注入的方式增强了 redux-thunk
的能力,从而使用户以使用类 redux-saga
的方式无感知的定义异步函数,并支持 async
与 Promise
方式触发异步请求。
- 异步函数
loading
状态注入 - 为effects加入
save
与pick
方法进行对state
存取的能力- 异步创建
reducer
并注入到原reducer树
中 - 扩展
redux-thunk
,并劫持dispatch
,扩展参数注入 - 实现
save
与pick
功能 - 实现
save
与pick
,如将功能作用范围扩展到对其他model
中,或支持解析更多的参数类型
- 异步创建
- 加入CI、eslint、单元测试功能
- 整合
reducers
与effects
, 统一为actionCreator
- 改写
Aciton Type
,使之支持定义跳转与智能提示 - 加入完整的
Typescript
支持 - 完善文档
(你可以随意使用此项目,不需要提前告知我,除非你需要其它服务。)