すべてのコンポーネント

MotionStream

まとめて届くストリーミングテキストを一定のペースで表示し、溜まった分にも追いつきます。

WebReact Native数字とテキスト

試してみる

サンプルを準備中…

いちばん短い使い方

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

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

代わりに処理してくれること

  • まとまって届いた文字が読めるペースに: テキストは塊ではなく、1 秒に speed 文字のペースで表示されます。
  • 溜まった分は表示を速めて、約 catchUp ミリ秒以内に見せきります。
  • 絵文字、国旗、結合文字は決して分割されず、届きかけの絵文字は残りを待ちます。
  • 回答が書き直されても、最初からやり直さず、共通する先頭部分から続けます。
  • 表示された文字はページに直接追加され、React のレンダリングは 1 秒に数回だけです。

こんなときに

  • チャットでのアシスタントの回答。
  • ビルドやデプロイのログ。
  • リアルタイムの字幕。

props

Prop型デフォルト説明
textstring—必須これまでのテキスト。増えたテキストは一定のペースで表示され、書き直された場合は共通する先頭部分から続きます。
speednumber901 秒あたりの基本の表示文字数。
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 も描画でき、更新は最大で 2 フレームに 1 回です。非表示のタブではすべてを一度に表示します。

React Native では、テキストは本物の Text で、フェードなしで表示されます。

使っているサンプル

検索

入力するとドキュメントを検索します。