dva-atr
v1.1.5
Published
基于dva和immutable.js的model创建工具
Downloads
10
Readme
dva-atr
对于dva的model进行了扩展
使用
$ npm install dva-atr
$ yarn add dva-atr
import { modelCtr, actionCtrCenter } from 'dva-atr'
创建model
import { modelCtr } from 'dva-atr'
import { Map } from 'immutable'
export default modelCtr(({ actionCtr, actionCtrCenter }) => ({
namespace: 'example',
state: {},
effects: {
* fetch(__, { call, put, select }) {
const json = yield call(requestMgr.fetch, ...)
if (json) {
/**
* 请在修改model过程当初,保证state的类型始终是你期望的
*/
yield put(actionCtr.set({
path: '/',
value: Map(json)
}))
}
}
},
subscriptions: {
listen({ dispatch, history }) {
dispatch(actionCtr.set({
path: 'type',
value: 'change'
}))
}
}
}))
listen
listen可以接受一个函数或者数组(默认监听当前namesapce为路由的路径)
listen还可以接受一个对象,key值为监听的路由
注意:监听路由都不需要在前面加上
/
`if (pathname === `/${namespace}`) `
管理组件中使用
actionCtr/reducers
|名称|说明|
|-- |-- |
|set|设置path
路径下的value
为新值|
|setMulti|一次性设置多次,只触发一次渲染|
|reset|重置path
路径下的model为初始化值(modelCtr创建时候,返回的state)|
|resetMulti|一次性重置多次,只触发一次渲染|
|update|更新path
路径下的model,deal
字段为函数oldModel => newModel
|
import { actionCtrCenter } from 'dva-atr'
const mapDispatchToProps = dispatch => ({
onBtnClick() {
dispatch(actionCtrCenter['example'].set({
path: 'type',
value: 'change-click'
}))
dispatch(actionCtrCenter['example'].update({
path: 'Index.modal.visible',
deal: val => !val
}))
},
onLogoutBtnClick() {
_.forEach(actionCtrCenter, actionCtr => {
dispatch(actionCtr.reset({
path: '/'
}))
})
}
})
const mapStateToProps = ({
example
}) => {
/**
* 注意model的类型为immutable,请根据你的需求进行关联
*/
return example.toJS()
}