jeem 是一个拥有完全轻量的核心,可以更高效地创建react应用的微型框架
前端界面的展现就是 state + view:react -> view && jeem -> state
- init: store setup (*) 依据model初始化全局store
- router: router register 路由注册
- start: node mount 节点渲染
最小代码结构:
import jeem from 'jeem'
const app = jeem()
app.init(/*your model*/)
app.router(/*your router*/)
app.start(/*your node*/)
- namespace: store's key
- state
- reducers: one reducer - one action 改变state
- effects: async actions 所有与外界相关的操作->同步触发reducers
- ......
One template:
export default {
namespace: 'todo',
state: {
list: [{
name: '吃饭',
status: true
}, {
name: '睡觉',
status: true
}, {
name: '打豆豆',
status: true
}]
},
reducers: {
add(state, payload) {
return {
...state,
list: state.list.concat(payload)
}
}
},
effects: {
async addAsync(state, payload) {
await new Promise(resolve => setTimeout(resolve, 1000))
dispatch.todo.add({ name: payload.name, status: payload.status })
}
}
}
在 view 中如何改变 state (call reducers) ?
dispatch.modelNamespace.reducerName/effectName(payload)
如何将 view 与 state 相关联 ?
import { connect } from 'jeem'
const mapStateToProps = state => ({
list: state.todo.list
})
const mapDispatchToProps = dispatch => ({
onAdd: ({ name, status }) => dispatch.todo.add({ name, status }),
onAddAsync: ({ name, status }) => dispatch.todo.addAsync({ name, status })
})
export default connect(mapStateToProps, mapDispatchToProps)(Todo)
connect 之后 state 改变就会自动触发 view 的改变
|--- build # webpack配置目录
|--- src
|--- component # 公共组件目录
|--- constants # 常量定义目录
|--- pages # 页面路由目录
|--- your-page
|--- components # 页面组件目录
|--- models # 模型目录
|--- your-model.js
|--- service # 页面 api 目录
|--- UI.js # 页面组件展示
|--- index.js # 页面组件关联(state-view关联文件 connect())
|--- service # api目录
|--- index.less
|--- index.html
|--- index.js # app初始化
|--- router.js # 根路由文件
|--- package.json
|--- webpack.config.js
这里提供了一个脚手架工具用来快速生成 jeem 项目:
yarn global add jeem-cli
jeem new my-jeem-app
cd my-jeem-app && yarn && yarn dev
或者使用 npm:
npm install jeem-cli -g
jeem new my-jeem-app
cd my-jeem-app && npm install && npm run dev
同时提供了两个示例模板:
jeem new jeem-demo --demo
jeem new jeem-demo-pro --demo-pro
启动以后访问 http://localhost:8080 出现 TodoList 即可参照进行开发
两大框架(个人觉得)存在的局限性:
- dva: redux + react-router + redux-saga结合性方案, redux + redux-saga 理解的曲线偏陡峭
- rematch: 基于redux的插件机制, 本身还是为了针对已经成型的redux项目过渡做了比较多hack
jeem的特点:
- 完全轻量的核心, 只暴露出 Provider & connect 针对 view + state 操作所需的最小 api, 其余模块完全基于es6(7)
- 核心专注于 state , 上层内置 react-router + antd + fetch 用来处理 路由 UI 与 数据请求
目前 jeem 已经可以完成一个 react app从开发到编译打包上线的整体流程
增加model的subscriptions: 有些情形采用订阅数据源的方式会更合适(keyboard输入 history路由变化等等)- 支持state操作过程中的middleware: reducers中不宜做过多判断
增加路由约定(参考umi约定即路由), 优化现有目录结构优化 webpack 配置,提升 start 开发以及 build 上线整体体验- 支持插件化的机制(maybe...)
- Typescript重构(maybe too...)
- more...
Welcome to create a issue or pr for promoting jeem !