所有元件

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,不淡入直接顯示。

用到它的範例

搜尋

輸入關鍵字搜尋文件。