Newton's Programmatic Measurements

    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

    83

    Version

    1.1.5

    License

    MIT

    Last publish

    Collaborators

    • yangbin1994