一、 dva的API
1. app = dva(opts): 创建应用,返回 dva 实例.
2. app.use(hooks): 配置 hooks 或者注册插件。(插件最终返回的是 hooks )
注:hooks包含
1111. onError((err, dispatch) => {})
effect执行错误或subscription通过done主动抛错时触发,可用于管理全局出错状态。
其他hooks可见:https://github.com/dvajs/dva/blob/master/docs/API_zh-CN.md#appusehooks
3. app.model(model) :注册 model,详见#Model部分。
4. app.unmodel(namespace):
取消 model 注册,清理 reducers, effects 和 subscriptions。subscription 如果没有返回 unlisten 函数,使用app.unmodel会给予警告⚠️
5. app.router(({ history, app }) => RouterConfig): 注册路由表。
6. app.start(selector?):
启动应用。selector可选,如果没有selector参数,会返回一个返回 JSX 元素的函数。、
二、 dva 中的 Model
model中的五个属性:
1. namespace:
model 的命名空间,同时也是他在全局 state 上的属性,只能用字符串,不支持通过.的方式创建多层命名空间。
2. state
初始值,优先级低于传给dva()的opts.initialState。
3. reducers
以 key/value 格式定义 reducer。用于处理同步操作,唯一可以修改state的地方。由action触发。
格式为(state, action) => newState或[(state, action) => newState, enhancer]。
4. effects
以 key/value 格式定义 effect。用于处理异步操作和业务逻辑,不直接修改state。由action触发,可以触发action,可以和服务器交互,可以获取全局state的数据等等。
格式为*(action, effects) => void或[*(action, effects) => void, { type }]。
5. subscriptions
以 key/value 格式定义 subscription。subscription 是订阅,用于订阅一个数据源,然后根据需要 dispatch 相应的 action。在app.start()时被执行,数据源可以是当前的时间、服务器的 websocket 连接、keyboard 输入、geolocation 变化、history 路由变化等等。