API文档
zoro(options) <Function>
该函数用于创建zoro应用的app
import zoro from '@opcjs/zoro'
const app = zoro()
该函数支持配置参数,参数解释如下
options.initialState <Object>
初始化全局的state值,优先级如下:initial state < plugin state < model state
也就是说相同字段会被上一级覆盖
options.extraMiddlewares <Array>
用于添加额外的redux middleware
options.extraEnhancers <Array>
用于添加额外的redux enhancer
options.onEffect(action) <Function>
监听用户调用model effect action
options.onAction(action) <Function>
监听用户调用model reducer action
自2.2.0版本之后调用异步action不再触发onAction
options.onReducer(modelNamespace, reducer) <Function>
用于扩展reducer,比如redux-undo
import zoro from '@opcjs/zoro'
import { undoable } from 'redux-undo'
const app = zoro({
onReducer(modelNamespace, reducer) {
return undoable(reducer)
}
})
options.onSetup(param) <Function>
应用启动时触发,当用户调用app.start(false)
时,需要主动调用app.setup()才会触发
param.put()
<Function>
用于触发同步action或者异步action
import zoro from '@opcjs/zoro'
const app = zoro({
async onSetup({ put }) {
await put({ type: 'modelName/asyncActionName' })
put({ type: 'modelName/actionName' })
}
})
- param.select()
<Function>
获取全局state状态值
import zoro from '@opcjs/zoro'
const app = zoro({
async onSetup({ select }) {
const state = select()
// 或者
const modelState = select(state => state['modelName'])
}
})
options.onError(error) <Function>
用于捕获所有的effect中抛出的异常,常用于全局错误处理,详见全局错误处理
app.model(params) <Function>
该函数用于注册model到应用中,支持注册单个或者多个model,注册多个时参数params为数组
import zoro from '@opcjs/zoro'
const app = zoro()
app.model(model)
app.model([model1, model2])
app.use(params) <Function>
该函数用于注册plugin到应用中,支持注册单个或者多个plugin,注册多个时参数params为数组,该函数调用推荐在app.model
之前调用,否则可能导致部分plugin无法正常工作
import zoro from '@opcjs/zoro'
import { createLoading } from '@opcjs/zoro'
const app = zoro()
app.use(createLoading())
app.start(steup) <Function>
启动应用初始化工作
setup
设置是否延迟setup的调用,主要用于微信小程序中延迟到环境ready后调用
app.setup() <Function>
手动调用setup,会触发全局的onSetup函数,model中的setup,plugin中的onSetupModel该函数仅在app.start(false)
时才需调用
app.intercept <Object>
用于设置相关拦截器,目前支持的拦截器类型如下
- app.intercept.action(handler)
<Function>
拦截action触发,不包含异步action部分
使用方式举例如下,假如我们希望能拦截user model的所有action,并为其统一添加用户id参数
app.intercept.action(function(action, { store, NAMESPACE_DIVIDER }) {
const [namespace, actionName] = action.type.split(NAMESPACE_DIVIDER)
if (namespace === 'user') {
return { type: action.type, payload: { ...action.payload, memberNo: 'memberNo' } }
}
})
- app.intercept.effect(handler)
<Function>
拦截异步action触发
该函数与app.intercept.action
相似,却别在于该函数支持异步模式
使用方式举例如下,假设我们有多个异步请求,他们依赖于登录授权,我们可以为此设置登录拦截器
app.intercept.effect(async function(action, { store, NAMESPACE_DIVIDER }) {
// 我们通过meta参数noAuth标记该action是否需要授权
if (action.meta && action.meta.noAuth) return action // 无需授权,直接返回继续执行
await waitLogin() // 需要授权,等待授权完成
return action
})
dispatcher <Object>
用于外部快捷触发action
import { dispatcher } from '@opcjs/zoro'
dispatcher.counter.add(payload, meta, error)
对于异步类型的action可以结合await使用
const result = await dispatcher.counter.asyncAdd(payload, meta, error)
result为异步action的返回值,更多信息查看MODEL API
同时也支持Promise语法
dispatcher.counter.asyncAdd(payload, meta, error).then(...).catch(...).finally(...)
同步类型的action至2.2.5版本之后不再支持.then(...)
connectComponent(mapStateToCom, mapDispatchToCom) <Function>
详细使用方法查看微信原生小程序WEAPP REDUX文档
对于taro,wepy支持微信原生小程序组件,因此提供该函数用于连接微信原生组件