import { Meta } from '@storybook/addon-docs/blocks';

<Meta title="研发文档/API" />

## 通用
### registerPage()
用来注册自定义组件

** 签名 **

Function(path: String, component: React.ReactNode) => void

** 参数 **

path: {String} 组件路径

component: {Object} 组件

### onNext()

组件与flow进行通信的方法

** 签名 **

Function(params: any) => void

## 渲染
### flow.router / flow.overlay / flow.toast
渲染场景/弹层/信息

以上三个函数用法相同，分别对应三个不同场景，返回Promise对象，需要配合await函数使用，示例请看demo。

** 签名 **

Function(path: String, data: Object) => Promise

** 参数 **

path: {String} 场景对应路由

data: {Object} 下发给场景的数据，通过props传入

```jsx
flow.router('/pages/scanItem', {
  currentPackage,
  countDataSource,
  widgetList,
});

flow.overlay('/system/alert', {
  title: '包裹被拦截',
});

flow.toast('/system/message', {
  title: '系统异常',
  type: 'warning',
});

```

### flow.next()
执行流程的下一帧。

### flow.push()
向 flow 中添加一帧。
```jsx
// 添加帧，匿名
flow.push(function(data, flow){})
// 添加个关键帧
flow.push("abc", function(data, flow){});

// 判断关键帧是否存在
flow.has("abc") // true
```
### flow.has(key)
判断关键帧是否存在
```jsx
flow.has(key)// 返回 true or false
```
### flow.get(key)
获取一个关键帧，并传递参数
```jsx
return flow.get("abc", {})
```
### flow.getFirstFrame(data)
获取第一帧
```jsx
return flow.getFirstFrame({})
```
### flow.replay(data)
重放当前帧，多次重放，不会增加历史记录。
```jsx
return flow.replay({})
```
### flow.restart(data)
获取第一个帧，并且会重置历史帧记录
```jsx
return flow.restart({})
```
### flow.startFrom(key, data)
从一个固定位置启动流程
```jsx
flow.startFrom("abx", {})
```
### flow.start(data)
从第一帧开始启动流程
```jsx
flow.start({});
```
