MotionStream
Gestreamter Text, gleichmäßig eingeblendet, der bei Schüben aufholt.
WebReact NativeZahlen und Text
Ausprobieren
Beispiel wird vorbereitet…
Kürzeste Nutzung
<MotionStream text={answerSoFar} initial />
<MotionStream text={answerSoFar}>
{visible => <Markdown>{visible}</Markdown>}
</MotionStream>Was sie dir abnimmt
- Aus Schüben wird Lesen: Text erscheint mit
speedZeichen pro Sekunde statt in Brocken. - Ein Rückstau beschleunigt das Einblenden, sodass er in etwa
catchUpMillisekunden angezeigt ist. - Emojis, Flaggen und kombinierende Zeichen werden nie getrennt, und ein halb empfangenes Emoji wartet auf den Rest.
- Eine umgeschriebene Antwort setzt am gemeinsamen Anfang an, statt neu zu beginnen.
- Eingeblendete Zeichen landen direkt auf der Seite; React rendert nur ein paar Mal pro Sekunde.
Gut für
- Die Antwort eines Assistenten in einem Chat.
- Ein Build- oder Deploy-Log.
- Live-Untertitel.
props
| Prop | Typ | Standard | Beschreibung |
|---|---|---|---|
text | string | —erforderlich | Der bisherige Text. Wachsender Text wird gleichmäßig eingeblendet; eine Umschreibung setzt am gemeinsamen Anfang an. |
speed | number | 90 | Grundtempo des Einblendens in Zeichen pro Sekunde. |
catchUp | number | 900 | Ein Rückstau wird durch Beschleunigen in etwa so vielen Millisekunden eingeblendet. |
initial | boolean | false | Auch den beim Mount vorhandenen Text einblenden (sonst erscheint er sofort). |
effect | 'fade' | 'none' | 'fade' | fade blendet neue Zeichen ein; none zeigt sie direkt. |
children | (visible: string) => ReactNode | Eine Funktion, die den getakteten Text erhält, etwa um Markdown zu rendern. | |
as | element | 'span' | Das zu rendernde Element. |
onMotionComplete | (text) => void | Läuft, sobald das Einblenden text eingeholt hat. |
Weitere props gehen an das gerenderte Element, also funktionieren className, style und Event-Handler wie gewohnt.
Web und React Native
Im Web blenden neue Zeichen ein (effect="fade") und werden zu normalem, markierbarem Text zusammengeführt. Ein Funktions-Kind erhält den getakteten String für Markdown, höchstens jeden zweiten Frame. In einem ausgeblendeten Tab wird alles sofort angezeigt.
Unter React Native ist der Text ein echtes Text und erscheint ohne Einblendung.