Miss any of our Open RFC calls?Watch the recordings here! »

dva-atr

1.1.5 • Public • Published

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()
}
 
 

Keywords

Install

npm i dva-atr

DownloadsWeekly Downloads

9

Version

1.1.5

License

MIT

Last publish

Collaborators

  • avatar