全部组件

MotionStream

以稳定节奏显示流式文本,内容成批到达时也能追上。

WebReact Native数字与文本

动手试试

正在准备示例…

最简用法

Answer.jsx
<MotionStream text={answerSoFar} initial />

<MotionStream text={answerSoFar}>
  {visible => <Markdown>{visible}</Markdown>}
</MotionStream>

它替你处理的事

  • 成批到达也能顺畅阅读:文本以每秒 speed 个字符的速度显示,而不是一块一块地蹦出来。
  • 积压的内容会加快显示,在大约 catchUp 毫秒内全部呈现。
  • 表情符号、旗帜和组合字符绝不会被拆开,只收到一半的表情符号会等待其余部分。
  • 回答被重写时,会从共同的开头继续,而不是从头再来。
  • 显示的字符直接写入页面;React 每秒只渲染几次。

适用场景

  • 聊天中助手的回答。
  • 构建或部署日志。
  • 实时字幕。

Props

Prop类型默认值说明
textstring—必需目前为止的文本。增长的文本以稳定节奏显示;被重写时从共同的开头继续。
speednumber90基础显示速度,单位为每秒字符数。
catchUpnumber900积压的内容会加速显示,在大约这么多毫秒内全部呈现。
initialbooleanfalse挂载时已有的文本也逐步显示(否则立即显示)。
effect'fade' | 'none''fade'fade 让新字符淡入;none 直接显示。
children(visible: string) => ReactNode接收按节奏输出的文本的函数,例如用于渲染 Markdown。
aselement'span'要渲染的元素。
onMotionComplete(text) => void每当显示进度追上 text 时运行。

其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。

Web 与 React Native

在 Web 上,新字符会淡入(effect="fade"),随后合并为普通的可选中文本。函数形式的子元素会收到按节奏输出的字符串,可用来渲染 Markdown,最多每两帧更新一次。在隐藏的标签页中,所有内容会一次性显示。

在 React Native 上,文本是真正的 Text,不带淡入直接显示。

用到它的示例

搜索

输入关键词搜索文档。