DuckMap

DuckMap提供Duck的组合功能,按路径(route)整合到state树中

constructor(options)

options与Duck相比,新增ducks参数

options.ducks

此参数为map映射 { [route]: subDuckOptions },会自动将子duck的reducer映射到state tree的route路径上,其中subDuckOptions可能有以下值:

类型 描述
Duck 直接指定子duck的构造类,自动传递namespace、route、selector作为options进行构造
[Duck, 'optionKey1', 'optionKey2', ...] 除默认options外,还额外从父duck同步options:optionKey1、optionKey2
[Duck, { optionKey1: 'from1' , optionKey2: 'from2', ...} 除默认options外,还额外从父duck同步from1等到子duck的optionKey1等上
[Duck, (options, duck) => ({...}), ... ] 除默认options外,额外传递函数返回的配置。注意:此处不能访问duck.ducks,否则会导致死循环

后3种额外配置可以组合使用,例如 `[Duck, 'key1', {key2:'from2'}, ..]`

注意:ducks的route不能与DuckMap自身的reducers key重复

import { DuckMap } from 'saga-duck'

class MyDuck extends DuckMap{
    init(){
        super.init();
        this.extend(
            {
                ducks: {
                    child1: ChildDuck,
                    child2: [ChildDuck, 'option1'],
                    child3: [ChildDuck, {option1: 'from1'}],
                    child4: [ChildDuck, (options, duck) => ({option1: options.from1})]
                }
            }
        )
    }
}

DuckMap.prototype.ducks

根据options.ducks生成的map,可以通过它访问子duck

class MyDuck extends DuckMap{
    init(){
        super.init();
        this.extend(
            {
                ducks: {...},
                sagas: [
                    function*({ducks: {child1}}){
                        yield put(child1.creators.foo())
                    }
                ]
            }
        )
    }

}

results matching ""

    No results matching ""