蘑菇小姐会开花

dva笔记(一)

基本概念

数据流向

user/browser –dispatch–> action —-> reducer —-> state —-> component
user/browser –dispatch–> action —-> effect —-> state —-> component
databse

Models

1.state
数据状态。
2.action
dispatch函数调用一个action,从而改变对应的数据,action必须带有type属性指明具体的行为。
3.dispatch
触发action的函数。
在dva中,connect Model的组件通过props可以访问到dispatch,可以调用Model中的Reducer或者Effects。

1
2
3
4
dispatch({
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?)

启动应用。

坚持原创技术分享,您的支持将鼓励我继续创作!