すべてのコンポーネント
MotionStream
まとめて届くストリーミングテキストを一定のペースで表示し、溜まった分にも追いつきます。
WebReact Native数字とテキスト
試してみる
いちばん短い使い方
Answer.jsx<MotionStream text={answerSoFar} initial />
<MotionStream text={answerSoFar}>
{visible => <Markdown>{visible}</Markdown>}
</MotionStream>
代わりに処理してくれること
- まとまって届いた文字が読めるペースに: テキストは塊ではなく、1 秒に
speed 文字のペースで表示されます。 - 溜まった分は表示を速めて、約
catchUp ミリ秒以内に見せきります。 - 絵文字、国旗、結合文字は決して分割されず、届きかけの絵文字は残りを待ちます。
- 回答が書き直されても、最初からやり直さず、共通する先頭部分から続けます。
- 表示された文字はページに直接追加され、React のレンダリングは 1 秒に数回だけです。
こんなときに
- チャットでのアシスタントの回答。
- ビルドやデプロイのログ。
- リアルタイムの字幕。
props
| Prop | 型 | デフォルト | 説明 |
|---|
text | string | —必須 | これまでのテキスト。増えたテキストは一定のペースで表示され、書き直された場合は共通する先頭部分から続きます。 |
|---|
speed | number | 90 | 1 秒あたりの基本の表示文字数。 |
|---|
catchUp | number | 900 | 溜まった分は、表示を速めてこのミリ秒数ほどで見せきります。 |
|---|
initial | boolean | false | マウント時にあるテキストも順に表示します(指定しなければすぐに表示)。 |
|---|
effect | 'fade' | 'none' | 'fade' | fade は新しい文字をフェードインし、none はそのまま表示します。 |
|---|
children | (visible: string) => ReactNode | | ペース配分されたテキストを受け取る関数。たとえば Markdown の描画に。 |
|---|
as | element | 'span' | 描画する要素。 |
|---|
onMotionComplete | (text) => void | | 表示が text に追いつくたびに実行されます。 |
|---|
ほかの props は描画される要素に渡るので、className、style、イベントハンドラーはいつもどおり使えます。