concent

concent

  • Docs
  • API
  • ChangeLog
  • GitHub

›顶层api

顶层api

  • run
  • configure
  • cloneModule
  • register
  • connect
  • connectDumb
  • emit
  • emitWith
  • dispatch
  • getState
  • getGlobalState
  • getComputed
  • setState
  • setGlobalState
  • call
  • execute
  • executeAll

通用类型解释

  • HandlerCtx
  • CcFragmentCtx
  • WatchFn

实例上下文api

  • ctx.dispatch
  • ctx.invoke
  • ctx.setState
  • ctx.setModuleState
  • ctx.setGlobalState
  • ctx.computed
  • ctx.watch
  • ctx.syncBool
  • ctx.set
  • ctx.emit
  • ctx.on
  • ctx.off

CcFragment api

  • Fifth Document

通用api

  • dispatch

模块克隆


你可以用此函数对已配置好的模块克隆出一个新的模块,新的模块和源模块在运行时是完全隔离和独立的

函数签名定义

cloneModule(
  newModule:string,
  existingModule:string,
  option?:{
    state:object,
    reducer:Reducer,
    computed:Computed,
    watch:Watch,
    init:Init
  }
)

reducer、watch、computed、init类型定义参见run的解释

  • newModule 新的模块名
  • existingModule 已存在的模块名
  • option 可以定义自己的个性化配置重新源模块的配置

自定义配置会被采取合并策略来合成新的模块配置

如何使用

假设已存在一个模块定义如下foo

const foo = {
  state:{
    f1:1,
    f2:2,
  },
  reducer:{
    updateF1:()=>{},
    uploadF1:()=>{},
  }
}

对它克隆,并重写updateF1函数,并新增一个updateF2函数

const bar = cloneModule('foo', foo, {
  reducer:{
    updateF1:()=>{console.log('overwrite f1')},
    updateF2:()=>{}
  }
});

run({ foo, bar});//启动时传入这两个模块

最后新的模块的reducer会是

{
  state:{
    f1:1,
    f2:2,
  },
  reducer:{
    updateF1:()=>{console.log('overwrite f1')},
    uploadF1:()=>{},
    updateF2:()=>{},
  }
}

何时使用

当你的新组建想复用你已有的模块的全部定义,但是期望他们的状态是相互隔离的时候,使用cloneModule可以不用让你copy一遍已有模块的全部代码,但是只是为了复用所有逻辑

除了state是真正被克隆了,其他的配置在内存里其实还是同一个引用指向的对象,只不过是可以被不同模块的实例调用而已,不用担心这种克隆会造成性能负担

← configureregister →
  • 函数签名定义
  • 如何使用
  • 何时使用
Copyright © 2019 concentjs.org