ola-toolkit
Version:
ola 开发工具套件
124 lines (85 loc) • 2.65 kB
Markdown
# Model
Model 用以创建一些范式的数据描述对象,在某个特定的场景下,这些对象拥有满足多数业务处理模式的预定义的 effects 和 reducers
## Model.API
创建 ajax 发起 (fetch) --- 等待 --- 响应成功 (success) / 响应失败 (fail) 模式的数据描述对象
在 models/index.js 中如下定义:
```javascript
import {Model} from 'ola-toolkit';
export default () => ({
asyncList: Model.API.takeLatest({
url: '/user/list',
method: 'GET',
}),
});
```
则在组件中可以派发一个获取 user list 的请求:
```javascript
dispatch({
subject: 'asyncList',
act: 'list',
})
```
通过 `connect` 从 store 中取出数据 (以 immutable 为例)
```javascript
@connect(state => ({
payload: state.getIn(['asyncList', 'payload']),
loading: state.getIn(['asyncList', 'loading']),
error: state.getIn(['asyncList', 'error']),
}))
```
## API
以下文档中的 `SagaHelpers` 即 Saga 辅助函数,主要有下面两种:
- takeEvery 获取每一个派发的行为
- takeLatest 获取最后一次派发的行为
### Model.API
- Model.API\[SagaHelpers\]\([Ajax RequestConfig](/docs/ola-toolkit/component/ajax)\)
创建一个 API 调用类型的数据描述对象
可派发 act:
| act | 说明 | payload |
| --- | --- | --- |
| fetch | 发起请求 | [Ajax RequestConfig](/docs/ola-toolkit/component/ajax) |
| success | 响应成功 (无需手动派发) | response |
| fail | 响应失败 (无需手动派发) | exception |
| update | 更新数据 | newPayload |
| clear | 清除数据 | - |
数据节点:
| key | 说明 | 数据类型 |
| --- | --- | --- |
| loading | 是否处于请求中 | boolean |
| loaded | 是否加载完成 | boolean |
| error | 异常信息 | Immutable \| object |
| payload | 响应数据 | Immutable \| object |
#### retry
重试次数
`default`: 0
当请求失败时,将尝试进行 retry 次重试,直至 API 流程 resolve (act: success)
```javascript
serviceList: Model.API.takeLatest({
url: '/api/service/list',
retry: 3
})
```
#### urlVars
url 路径变量替换
当需要使用动态路径时,可以在 `url` 配置项中使用 `:var` 占位符:
```javascript
serviceList: Model.API.takeLatest({
url: '/api/service/:id',
params: {}
})
```
在 dispatch 时,通过 urlVars 对 url 中的变量进行配置:
```javascript
this.props.dispatch({
subject: 'serviceList',
act: 'fetch',
urlVars: {
id: 3, // url: /api/service/3
}
});
```
### Model.Helper
- createBasicApiReducer()
创建 API 调用类型的 reducers
- initialApiState
API 调用类型 reducers 的初始值