MotionStream
Testo in streaming rivelato a ritmo costante, che recupera le raffiche.
WebReact NativeNumeri e testo
Provalo
Preparazione dell’esempio…
L’uso più breve
<MotionStream text={answerSoFar} initial />
<MotionStream text={answerSoFar}>
{visible => <Markdown>{visible}</Markdown>}
</MotionStream>Di che cosa si occupa al posto tuo
- Le raffiche diventano lettura: il testo viene rivelato a
speedcaratteri al secondo invece che a blocchi. - Un arretrato accelera la rivelazione, così compare entro circa
catchUpmillisecondi. - Emoji, bandiere e segni combinanti non vengono mai spezzati, e un’emoji ricevuta a metà aspetta il resto.
- Una risposta riscritta prosegue dall’inizio comune invece di ricominciare.
- I caratteri rivelati vanno direttamente nella pagina; React si renderizza solo poche volte al secondo.
Usalo per
- La risposta di un assistente in una chat.
- Il log di una build o di un deploy.
- Sottotitoli dal vivo.
Props
| Prop | Tipo | Predefinito | Descrizione |
|---|---|---|---|
text | string | —obbligatoria | Il testo ricevuto finora. Il testo che cresce viene rivelato a ritmo costante; una riscrittura prosegue dall’inizio comune. |
speed | number | 90 | Velocità base di rivelazione, in caratteri al secondo. |
catchUp | number | 900 | Un arretrato viene rivelato entro circa questi millisecondi accelerando. |
initial | boolean | false | Rivela anche il testo presente al montaggio (altrimenti compare subito). |
effect | 'fade' | 'none' | 'fade' | fade fa comparire in dissolvenza i nuovi caratteri; none li mostra direttamente. |
children | (visible: string) => ReactNode | Una funzione che riceve il testo cadenzato, per esempio per renderizzare Markdown. | |
as | element | 'span' | L’elemento da renderizzare. |
onMotionComplete | (text) => void | Viene eseguito ogni volta che la rivelazione raggiunge text. |
Le altre props vanno all’elemento renderizzato, quindi className, style e gli event handler funzionano come sempre.
Web e React Native
Sul web i nuovi caratteri compaiono in dissolvenza (effect="fade") e vengono integrati in testo semplice e selezionabile. Un figlio funzione riceve la stringa cadenzata per il Markdown, al massimo un frame sì e uno no. In una tab nascosta compare tutto subito.
Su React Native il testo è un vero Text e compare senza dissolvenza.