run载入模块配置,register注册组件
无需Provider包裹,被注册后的组件setState调用就接通store。
模块提供state、reducer、watch、computed和init 5个选项,支持按需定义,覆盖所有业务场景。
支持组件跨多个模块消费数据,定义key级别的变更依赖。
除setState之外,还支持dispatch、invoke提交数据变更,同时让ui视图与业务逻辑彻底解耦。
支持实例级别computed、watch定义;支持组件emit&on;支持setup特性。
hoc、render props和hook 3种方式定义的组件均享有一致的api调用体验,相互切换代价为0。
基于依赖标记、引用收集和状态分发原理工作,内置renderKey、lazyDispatch、delayBroadcast等特性。
对于class组件,默认采用反向继承策略,让react dom树的层级结构保持简洁与干净。
支持定义中间件拦截所有的数据变更提交记录做额外处理,也支持自定义插件接收运行时的各种信号,增强concent能力。
支持任意地方调用configure接口动态配置模块,方便就近配置模块,且能够独立打包组件发布npm。
支持对已定义模块进行克隆运行时是完全独立的新模块,满足抽象工厂函数等高维度抽象。
npm install concent --save
//or
yarn add concent
import React, { Component } from 'react';
import ReactDom from 'react-dom';
import { run, register, useConcent, registerDumb } from 'concent';
run({
foo: {// declared a module named 'foo'
state: { greeting: 'hello concent' },
reducer: { ... }
}
})
// three ways of creating component, multi ways to change state
function HookFnComp() {
const ctx = useConcent('foo');
const { state: { greeting }, sync } = ctx;
return <input value={greeting} onChange={sync('greeting')} />
}
const RenderPropsComp = registerDumb('foo')(...);
@register('foo')
class HocClassComp extends Component {...}
function App() {
return (
<>
<HookFnComp />
<HocClassComp />
<RenderPropsComp />
</>
)
}
ReactDom.render(<App />, document.getElementById('root'));