基本概念
数据流向
user/browser –dispatch–> action —-> reducer —-> state —-> component
user/browser –dispatch–> action —-> effect —-> state —-> component
Models
1.state
数据状态。
2.action
dispatch函数调用一个action,从而改变对应的数据,action必须带有type属性指明具体的行为。
3.dispatch
触发action的函数。
在dva中,connect Model的组件通过props可以访问到dispatch,可以调用Model中的Reducer或者Effects。1
2
3
4dispatch({
type: 'add', // 如果在model外调用,需要添加namespace
payload: {} //需要传递的信息
})
4.reducer
一个纯函数,同样的输入必须获得同样的输出。
5.effect
副作用,异步操作。
6.subscription
订阅一个数据源,然后根据条件dispatch需要的action。
7.router
路由。
8.router components
路由组件。
API
app = dva(opts)
创建应用,返回dva实例。
opts:
history:指定给路由用的history,默认是hashHistory。
initialize:指定初始数据,优先级高于model中的state,默认是{}。
app.use(hooks)
配置hooks或者注册插件。
app.model(model)
注册model。
model包含的5个属性:
namespace:命名空间,在全局state上的属性,只能用字符串,不支持通过.
的方式创建多层命名空间。
state:初始值。
reducers:用于处理同步操作。(state, action) => newState
effects:用于处理异步操作和业务逻辑。由action触发,可以触发action,可以和服务器交互,可以获取全局state的数据。*(action, effects) => void
[*(action, effects) => void, {type}]
type类型有:takeEvery, takeLatest, throttle, watcher
subscriptions:订阅数据源。({dispatch, history}, done) => unlistenFunction
app.unmodel(namespace)
取消model注册,清理reducers,effects和subsctiptions。
如果要使用app.unmodel(),subscription必须返回unlisten方法,用于取消数据订阅。
app.router({history, app} => RouterConfig)
注册路由表。
app.start(selector?)
启动应用。