MotionStream
Потоковый текст, раскрываемый в ровном темпе, который догоняет всплески.
ВебReact NativeЧисла и текст
Попробуйте
Подготовка примера…
Кратчайшее использование
<MotionStream text={answerSoFar} initial />
<MotionStream text={answerSoFar}>
{visible => <Markdown>{visible}</Markdown>}
</MotionStream>Что он берёт на себя
- Всплески превращаются в чтение: текст раскрывается со скоростью
speedсимволов в секунду, а не кусками. - Накопившийся текст ускоряет раскрытие, чтобы показаться примерно за
catchUpмиллисекунд. - Эмодзи, флаги и комбинируемые знаки никогда не разрываются, а наполовину полученный эмодзи ждёт остальное.
- Переписанный ответ продолжается с общего начала, а не начинается заново.
- Раскрытые символы сразу попадают на страницу; React рендерит лишь несколько раз в секунду.
Для чего подходит
- Ответ ассистента в чате.
- Лог сборки или деплоя.
- Живые субтитры.
Props
| Проп | Тип | По умолчанию | Описание |
|---|---|---|---|
text | string | —обязательно | Текст на данный момент. Растущий текст раскрывается в ровном темпе; переписанный продолжается с общего начала. |
speed | number | 90 | Базовая скорость раскрытия в символах в секунду. |
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 и обработчики событий работают как обычно.
Веб и React Native
В вебе новые символы плавно появляются (effect="fade") и сливаются в обычный выделяемый текст. Дочерняя функция получает текст в нужном темпе для Markdown — не чаще чем через кадр. В скрытой вкладке всё показывается сразу.
В React Native текст — настоящий Text и появляется без затухания.