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
Duck.prototype.types
根据duck.quickTypes及duck.rawTypes生成,示例:
class MyDuck extends Duck{
get quickTypes() {
enum Types {
FOO
}
return {
...super.quickTypes,
...Types,
BAR: 1
};
}
get rawTypes(){
return {
...super.quickTypes,
FUN: 'FUN'
}
}
}
const duck = new MyDuck()
console.log(duck.types.FOO) // "global/FOO"
console.log(duck.types.BAR) // "global/BAR"
console.log(duck.types.FUN) // "FUN"
Duck.prototype.reducer
根据duck.reducers生成最终reducer,使用DuckRuntime时无需访问此属性。
Duck.prototype.selector
根据options.selector生成,可以从Redux store的全局state取到当前duck层级的state
const myState = duck.selector(store) // 此处store为Redux store的全局state,而不是store实例
Duck.prototype.selectors
根据duck.rawSelectors生成,已经经过duck.selector包装,可直接从全局state取到当前duck下对应的值
class MyDuck extends Duck{
get rawSelectors(){
type State = this['State']
return {
...super.rawSelectors,
num(state: State){
return state.num
}
}
}
}
const duck = new MyDuck()
const num = duck.selectors.num(store)
Duck.prototype.rawSelectors / localSelectors
与duck.selectors的区别在于,它没有经过duck.selector的包装,可以组合使用
const num = duck.rawSelectors.num(duck.selector(store))
Duck.prototype.creators
用户自行定义
class MyDuck extends Duck{
get creators() {
return {
...super.creators,
inc() { ... }
};
}
}
const duck = new MyDuck()
dispatch(duck.creators.inc())
Duck.prototype.saga
saga入口,为generator,所有saga逻辑都应该由它开始
Last updated
Was this helpful?