react函数组件怎么使用umi/dva中的useModel()并且modle文件里面是什么
时间: 2024-09-06 11:05:05 浏览: 52
在React 组件中使用Echarts的示例代码
3星 · 编辑精心推荐
`useModel` 是 `umi` 或者 `dva` 这类基于 `React` 的前端框架提供的一个 Hook 函数,它可以用来在函数组件中订阅和使用 `dva` 的 `model` 数据和操作。使用 `useModel` 可以使得在函数组件中管理状态变得非常简洁。
在 `model` 文件中,通常定义了状态(state)、订阅(subscriptions)、异步操作(effects)、 reducers(处理同步逻辑)等部分。一个典型的 `model` 结构如下:
```javascript
// model.js
export default {
namespace: 'counter', // 用于唯一标识model
state: {
// 初始状态
count: 0,
},
reducers: {
// 处理同步逻辑,可以理解为Redux中的action
add(state) {
const newCount = state.count + 1;
return { ...state, count: newCount };
},
subtract(state) {
const newCount = state.count - 1;
return { ...state, count: newCount };
},
},
effects: {
// 处理异步逻辑
*asyncAdd(action, { call, put }) {
yield call(delay, 1000); // 假设有一个延迟1秒的异步操作
yield put({ type: 'add' }); // 执行一个reducer
},
},
};
```
在函数组件中使用 `useModel` 的示例:
```javascript
import React from 'react';
import { useModel } from 'umi';
const Counter = () => {
// 使用 useModel 订阅 model,并解构出 state 和 dispatchers
const [state, dispatchers] = useModel('counter');
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatchers.add()}>+</button>
<button onClick={() => dispatchers.subtract()}>-</button>
</div>
);
};
export default Counter;
```
在上面的函数组件中,`useModel('counter')` 调用订阅了名为 'counter' 的 model,并返回了当前状态和可以分发的函数(dispatchers),这使得你可以在组件内直接操作状态。
阅读全文