Duck

Duck是所有duck的基类

constructor(options)

options支持以下参数,所有都为可选,常用参数加粗展示。

参数名 类型 描述 示例
namespace String 名字空间,会作为actionType的前缀 "global"
route String 对应Redux store的位置,会作为actionType的前缀,用户无需指定,DuckMap会自动传递 "counter1"
selector function(globalState){ return localState } 当前duck对应Redux store位置的selector。通常无需定义,会自动从options.route生成。 state => state.counter1
typeList String[] actionType列表,通过duck.types.INC访问 [ "INC" ]
types enum{ [type]: string } actionType在typescript下可以直接传递enum类型,与typeList二选一 enum Types{ }
reducer (state, action, duck) => newState 单独reducer (state=0, action, duck) => state+1
reducers duck => { [key]: reducer } 最终会通过combineReducers合并为reducer duck => ({ num: (state, action) => state+1 })
selectors { [key]: selector } 值选择器,selector传入当前duck的state,返回计算结果。selector内的this指向selectors配置,可以调用其它selector。 { num: state => state.num }
creators duck => { [key]: creator } actionCreators duck => ({ inc: () => ({type: duck.types.INC}) })
sagas saga[] saga列表,执行时会从传入duck作为参数 [ function*(duck){ yield select(duck.selectors.num) } ]

Duck.prototype.init

供Duck扩展时使用,见Duck.prototype.extend

Duck.prototype.extend

供Duck扩展时使用

class ExampleDuck extends Duck{
    init(){
        super.init();
        this.extend({
            types: {...},
            reducers: duck=>({...}),
            ...
        })
    }
}

Duck.prototype.types

根据options.typeList生成,示例:

const duck = new Duck({ typeList: ['ADD', 'SUB'] })
// typescript
// enum Types{ ADD, SUB }
// new Duck({ types: Types })
console.log(duck.types.ADD) // "global//ADD"
console.log(duck.types.SUB) // "global//SUB"

Duck.prototype.reducer

根据options.reducer和options.reducers生成最终reducer,使用DuckRuntime时无需访问此属性。

Duck.prototype.selector

根据options.selector或options.route生成,可以从Redux store的全局state取到当前duck层级的state

const myState = duck.selector(store) // 此处store为Redux store的全局state,而不是store实例

Duck.prototype.selectors

根据options.selectors生成,已经经过duck.selector包装,可直接从全局state取到当前duck下对应的值

const num = duck.selectors.num(store)

Duck.prototype.localSelectors

同options.selectors,不与duck.selectors的区别在于,它没有经过duck.selector的包装,方便进行组合使用

const num = duck.localSelectors.num(duck.selector(store))

Duck.prototype.creators

根据options.creators生成,是最终的actionCreator map

dispatch(duck.creators.inc())

Duck.prototype.options

最终合并后的options,可以用来访问外界传递的自定义属性

results matching ""

    No results matching ""