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