定义model:
首先,通过创建一个model文件来定义应用程序中的数据模型,早model文件中,可以初始状态、监听器、异步请求等
引入model:
在入口文件(app.js/index.js)中引入定义的model。
使用model:
在组件中使用connect方法连接model和组件,并将模型中的状态和action通过props传递给组件。
触发action:
action在组件中,可以通过调用props中的函数来触发action,从而改变应用程序的状态。
数据流更新:
当触发action时,dva会根据reducer和effect中的逻辑来更新数据模型的状态。触发reducer会同更新状态。而触发effect则可以进行异步操作,在异步操作完成之后再出发reducer来更新状态。
在 Umi 中使用 dva 进行状态管理的工作流程如下:
1. 创建 model 文件:在 src/models 目录下创建一个新的 model 文件。该文件定义了一个 namespace 和一些关于该 model 的状态和操作的定义。
export default {
namespace : 'example' ,
state : {
count : 0 ,
} ,
reducers : {
increment ( state ) {
return { ... state, count : state. count + 1 } ;
} ,
} ,
} ;
2. 注册 model:在 src/models 目录下的 index.js 文件中,将创建的 model 注册到 dva 中。
import example from './example' ;
export default [ example] ;
3. 连接 dva:在应用入口文件(通常是 src/app.js 或 src/app.jsx)中,使用 dva 连接应用。
import { create } from 'dva' ;
import models from './models' ;
import App from './App' ;
const app = create ( ) ;
models. forEach ( ( model ) => app. model ( model) ) ;
app. router ( App) ;
app. start ( '#root' ) ;
4. 在组件中使用状态:在需要使用状态的组件中,使用 connect 函数从 dva 中的 state 中获取状态值,并可以通过 dispatch 方法触发 reducers 中定义的操作。
import React from 'react' ;
import { connect } from 'dva' ;
function Example ( { count, dispatch } ) {
const handleIncrement = ( ) => {
dispatch ( { type : 'example/increment' } ) ;
} ;
return (
< div>
< p> Count: { count} < / p>
< button onClick= { handleIncrement} > Increment< / button>
< / div>
) ;
}
export default connect ( ( { example } ) => ( {
count : example. count,
} ) ) ( Example) ;
上述代码中,通过使用 connect 函数将组件连接到 dva 中,我们可以从 dva 的 state 中获取到 example model 的 count 属性,并将其作为组件的 props 进行使用。同时,我们通过 dispatch 方法触发了 example model 中的 increment 操作。
这就是使用 dva 进行状态管理的基本工作流程。通过定义 model 文件,注册 model,连接 dva,然后在组件中使用 connect 函数,我们可以实现简洁、高效的状态管理。