Model API 介绍

一个model,我们可以看作是redux中state,action,type,reducer以及一个异步中间件effect的集合,一个较为完整的model定义如下:

export default {
    namespace: 'counter',
    state: {
        count: 0,
    },
    setup({ put, select, selectAll }) {

    },
    reducers: {
        add(action, state) {
            return { ...state, count: state.count + 1 }
        },
        minus(action, state) {
            return { ...state, count: state.count - 1 }
        },
    },
    effects: {
        async delayAdd(action, { put, select, selectAll }) {
            await delay(2000)
            put({ type: 'add' })
        },
    },
}

一个model的定义包含以上5个字段

namespace <String>

model的全局唯一命名,是全局state中注册的key,可用于获取model state,触发model action

state <Any>

state是model初始值,优先级如下:initial state < plugin state < model state,理论上可以是任意的值,但多数情况下,我们希望这是一个javascript的对象

setup(options) <Function>

应用初始化调用app.start()或者app.setup()时触发,主要设计用于处理本模块中的初始化工作,支持async, await异步语法

  • options.put(action) <Function>

    用于触发同步action及异步action,支持await等待返回结果

    put({ type: 'actionName' }) // 触发本model中的action
    const result = await put({ type: 'asyncActionName' }) // 触发本model中的异步action
    put({ type: 'modelName/actionName' }) // 触发外部model的action
    put({ type: 'modelName/asyncActionName' }) // 触发外部model中的异步action
    
  • options.select(handler) <Function>

    用于获取本model中的state

    const modelState = select()
    // 或者
    const count = select(state => state.count)
    
  • options.selectAll(handler) <Function>

    用于获取全局state

    const globalState = selectAll()
    // 或者
    const modelState = selectAll(state => state['modelName'])
    

reducers <Object>

用于定义同步action,也是唯一可修改redux state的入口

{
    reducers: {
        add(action, state) {
            // 改变state,返回一个新的state
        }
    }
}

effects <Object>

用于定义异步action,支持async,await

{
    effects: {
        async delayAdd(action, { put, select, selectAll }) {
            await delay(2000)
            put({ type: 'add' })
        },
    }
}

put,select,selectAll前面已经解释了,这里不再描述

results matching ""

    No results matching ""