MotionStream
Du texte en streaming révélé à un rythme régulier, qui rattrape son retard en cas de rafale.
WebReact NativeNombres et texte
Essayer
Préparation de l’exemple…
Usage minimal
<MotionStream text={answerSoFar} initial />
<MotionStream text={answerSoFar}>
{visible => <Markdown>{visible}</Markdown>}
</MotionStream>Ce qu’il gère pour vous
- Les rafales deviennent lisibles : le texte apparaît à
speedcaractères par seconde au lieu d’arriver par blocs. - En cas de retard accumulé, le rythme s’accélère pour tout afficher en environ
catchUpmillisecondes. - Les emojis, les drapeaux et les signes combinants ne sont jamais coupés, et un emoji reçu à moitié attend la suite.
- Une réponse réécrite repart du début commun au lieu de tout recommencer.
- Les caractères révélés vont directement dans la page ; React ne se rend que quelques fois par seconde.
À utiliser pour
- La réponse d’un assistant dans un chat.
- Un log de build ou de déploiement.
- Des sous-titres en direct.
Props
| Prop | Type | Défaut | Description |
|---|---|---|---|
text | string | —obligatoire | Le texte reçu jusqu’ici. Un texte qui s’allonge est révélé à un rythme régulier ; une réécriture repart du début commun. |
speed | number | 90 | Rythme de base de la révélation, en caractères par seconde. |
catchUp | number | 900 | Un retard accumulé est révélé en environ autant de millisecondes, en accélérant. |
initial | boolean | false | Révéler aussi le texte présent au montage (sinon il s’affiche aussitôt). |
effect | 'fade' | 'none' | 'fade' | fade fait apparaître les nouveaux caractères en fondu ; none les affiche directement. |
children | (visible: string) => ReactNode | Une fonction qui reçoit le texte rythmé, par exemple pour rendre du Markdown. | |
as | element | 'span' | L’élément à rendre. |
onMotionComplete | (text) => void | S’exécute chaque fois que la révélation rattrape text. |
Les autres props vont à l’élément rendu : className, style et les gestionnaires d’événements fonctionnent comme d’habitude.
Web et React Native
Sur le web, les nouveaux caractères apparaissent en fondu (effect="fade") puis sont intégrés dans du texte ordinaire et sélectionnable. Un enfant fonction reçoit la chaîne rythmée pour du Markdown, au plus une image sur deux. Dans un onglet masqué, tout s’affiche d’un coup.
Sur React Native, le texte est un vrai Text et apparaît sans fondu.