Mirror
一款简洁、高效、易上手的 React 框架。(Inspired by dva and jumpstate)
Painless React and Redux.
为什么?
我们热爱 React 和 Redux。
一个典型的 React/Redux 应用看起来像下面这样:
- 一个
actions/
目录用来手动创建所有的action type
(或者action creator
); - 一个
reducers/
目录以及无数的switch
来捕获所有的action type
; - 必须要依赖 middleware 才能处理
异步 action
; - 明确调用
dispatch
方法来 dispatch 所有的 action; - 手动创建
history
对象关联路由组件,可能还需要与 store 同步; - 调用
history
上的方法或者 dispatch action 来手动更新路由;
存在的问题?太多的 样板文件 以及繁琐甚至重复的劳动。
实际上,上述大部分操作都是可以简化的。比如,在单个 API 中创建所有的 action
和 reducer
;比如,简单地调用一个函数来 dispatch 所有的同步和异步 action,且不需要额外引入 middleware;再比如,使用路由的时候只需要关心定义具体的路由,不用去关心 history
对象,等等。
这正是 Mirror 的使命,用极少数的 API 封装所有繁琐甚至重复的工作,提供一种简洁高效的更高级抽象,同时保持原有的开发模式。
特性
- 极简 API(只有 4 个新 API)
- 易于上手
- Redux action 从未如此简单
- 支持动态创建 model
- 强大的 hook 机制
快速开始
初始化项目
使用 create-react-app 创建一个新的 app:
$ npm i -g create-react-app$ create-react-app my-app
创建之后,从 npm 安装 Mirror:
$ cd my-app$ npm i --save mirrorx$ npm start
index.js
// 声明 Redux state, reducer 和 action,// 所有的 action 都会以相同名称赋值到全局的 actions 对象上mirror // 使用 react-redux 的 connect 方法,连接 state 和组件const App = <div> <h1>propscount</h1> /* 调用 actions 上的方法来 dispatch action */ <button onClick= actionsapp>-</button> <button onClick= actionsapp>+</button> /* dispatch async action */ <button onClick= actionsapp>+ Async</button> </div> // 启动 app,render 方法是加强版的 ReactDOM.render
Demo
指南
查看 指南。
API
查看 API 文档。
示例项目
FAQ
Redux DevTools 扩展?
是否支持支持。
是否可以使用额外的 Redux middleware?
可以,在 mirror.defaults
接口中指定即可,具体可查看文档。
Mirror 用的是什么版本的 react-router?
react-router 4.x。