MotionStream
Texto en streaming mostrado a un ritmo constante que se pone al día con las ráfagas.
WebReact NativeNúmeros y texto
Pruébalo
Preparando el ejemplo…
Uso mínimo
<MotionStream text={answerSoFar} initial />
<MotionStream text={answerSoFar}>
{visible => <Markdown>{visible}</Markdown>}
</MotionStream>Lo que resuelve por ti
- Las ráfagas se vuelven lectura: el texto aparece a
speedcaracteres por segundo en lugar de a trozos. - Si se acumula texto, el ritmo se acelera para mostrarlo en unos
catchUpmilisegundos. - Los emojis, las banderas y las marcas combinadas nunca se parten, y un emoji recibido a medias espera al resto.
- Una respuesta reescrita continúa desde el inicio común en lugar de empezar de nuevo.
- Los caracteres mostrados van directamente a la página; React solo se renderiza unas pocas veces por segundo.
Úsalo para
- La respuesta de un asistente en un chat.
- Un log de build o de despliegue.
- Subtítulos en vivo.
Props
| Prop | Tipo | Por defecto | Descripción |
|---|---|---|---|
text | string | —obligatoria | El texto hasta ahora. El texto que crece aparece a un ritmo constante; una reescritura continúa desde el inicio común. |
speed | number | 90 | Ritmo base de revelado, en caracteres por segundo. |
catchUp | number | 900 | Lo acumulado se revela en unos tantos milisegundos acelerando el ritmo. |
initial | boolean | false | Revela también el texto presente al montar (si no, se muestra de inmediato). |
effect | 'fade' | 'none' | 'fade' | fade hace aparecer los caracteres nuevos con un fundido; none los muestra directamente. |
children | (visible: string) => ReactNode | Una función que recibe el texto dosificado, por ejemplo para renderizar Markdown. | |
as | element | 'span' | El elemento que se renderiza. |
onMotionComplete | (text) => void | Se ejecuta cada vez que el revelado alcanza a text. |
Las demás props van al elemento renderizado, así que className, style y los manejadores de eventos funcionan como siempre.
Web y React Native
En la web, los caracteres nuevos aparecen con un fundido (effect="fade") y se integran en texto normal y seleccionable. Un hijo función recibe la cadena dosificada para Markdown, como mucho cada dos fotogramas. En una pestaña oculta todo se muestra de golpe.
En React Native, el texto es un Text real y aparece sin fundido.