Duck

Duck是所有duck的基类

constructor(options)

options支持以下参数,通常情况我们不需要作任何修改。

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