inori-core
v0.2.0
Published
Inspired by Dva. basic package based on reudx, redux-observable.
Downloads
3
Readme
wow
Inspired by Dva.
basic package based on reudx, redux-observable.
compared to dva:
G:
- 没有侵入性
- 预留default reducer处理,支持高阶reducer
- 对旧项目友好,改造成本极低
- 能够使用rx 方法,对异步有强处理能力
NG:
- 强依赖rxjs,比较笨重
Install
npm install inori
peer dependency
"react",
"react-dom",
"react-redux",
"redux",
"redux-observable",
"rxjs",
Usage
write model:
const model = {
namespace: 'coupon',
state: {
details: {},
records: [],
},
epics:{
loadCopon: (action$, store) => {
return action$.ofType('coupon/loadCoupon')
.map((action) => {
return {type: 1}
});
},
},
reducers: {
showLoading(state, action){
return {...state, loading: true};
},
// handle high order reducer
default(state, action){
return state;
}
}
};
export default model;
write page:
import React,{PureComponent} from 'react';
import {connect} from 'react-redux';
import inori from 'inori';
const {createAction} = inori;
class Page extends PureComponent{
constructor(props){
super(props);
}
componentDidMount(){
this.props.loadCoupon();
}
render(){
console.log(this.props);
return (
<div>
this is page super
</div>
);
}
}
export default connect((state) => {
return {state};
}, {
loadCoupon: createAction('coupon/loadCoupon')
})(Page);
write entry file:
import inori from 'inori';
import model from './activity/demo/model';
import Page from "./activity/demo/Page";
inori.addModel(model);
inori.start(Page, 'root');
API
addModel(model) : add model for inori
start(Root, 'domId'): start inori
createAction(actionName): simple action create for connect view
addReducer(reducerKey, reducerHandle): push origin reducer handle to inori control
addEpic(epic or epic Array): push origin epic to inori control
addPlugin(pluginKey, plugin): inject dependency to redux-observable
addMiddleware(middlewares or middleware): redux middleware
TODO
- [ ] replece reducer
- [ ] reducer version conflict
- [ ] epic replace
- [ ] plugin system(doing)