resumeToPipeableStream
resumeToPipeableStream передаёт предварительно отрисованное дерево React в потоковый поток Node.js.
const {pipe, abort} = await resumeToPipeableStream(reactNode, postponedState, options?)
Примечание
Этот API предназначен только для Node.js. В средах с веб-потоками, таких как Deno и современные edge-среды выполнения, следует использовать вместо него resume.
Справочник
resumeToPipeableStream(node, postponed, options?)
Вызовите resume, чтобы продолжить отрисовку предварительно отрисованного дерева React в HTML и передать его в поток Node.js для записи.
import { resume } from 'react-dom/server';
import {getPostponedState} from './storage';
async function handler(request, response) {
const postponed = await getPostponedState(request);
const {pipe} = resumeToPipeableStream(<App />, postponed, {
onShellReady: () => {
pipe(response);
}
});
} Ниже приведены дополнительные примеры.
Параметры
-
reactNode: узел React, с которым вы вызвалиprerender. Например, JSX-элемент, такой как<App />. Предполагается, что он представляет весь документ, поэтому компонентAppдолжен отрисовать тег<html>. -
postponedState: непрозрачный объектpostpone, возвращённый API предварительной отрисовки и загруженный из места, где вы его сохранили (например, из Redis, файла или S3). -
необязательный
options: объект с параметрами потоковой передачи.-
необязательный
nonce: строкаnonce, разрешающая выполнение скриптов для политики безопасности содержимогоscript-src. -
необязательный
signal: сигнал отмены, позволяющий прервать серверную отрисовку и отрисовать остальную часть на клиенте. -
необязательный
onError: функция обратного вызова, вызываемая при возникновении ошибки на сервере — восстановимой или нет. По умолчанию она вызывает толькоconsole.error. Если вы переопределите её, чтобы записывать отчёты о сбоях в журнал, обязательно также вызывайтеconsole.error. -
необязательный
onShellReady: функция обратного вызова, вызываемая сразу после завершения оболочки. Здесь можно вызватьpipe, чтобы начать потоковую передачу. React будет передавать дополнительное содержимое потоком после оболочки вместе со встроенными тегами<script>, которые заменяют HTML-заглушки загрузки содержимым. -
необязательный
onShellError: функция обратного вызова, вызываемая при ошибке отрисовки оболочки. Ошибка передаётся ей в качестве аргумента. Поток пока не передал ни одного байта, а функцииonShellReadyиonAllReadyне будут вызваны, поэтому вы можете вывести резервную HTML-оболочку или использовать прелюдию.
-
необязательный
Возвращаемое значение
resume возвращает объект с двумя методами:
-
pipeзаписывает HTML в предоставленный поток Node.js для записи. ВызовитеpipeвonShellReady, если хотите включить потоковую передачу, или вonAllReadyдля поисковых роботов и статической генерации. -
abortпозволяет прервать серверную отрисовку и отрисовать остальную часть на клиенте.
Ограничения
-
resumeToPipeableStreamне принимает параметры дляbootstrapScripts,bootstrapScriptContentилиbootstrapModules. Вместо этого передайте эти параметры вызовуprerender, который создаётpostponedState. Вы также можете вручную добавить начальное содержимое в поток для записи. -
resumeToPipeableStreamне принимаетidentifierPrefix, поскольку префикс должен быть одинаковым вprerenderиresumeToPipeableStream. - Поскольку
nonceнельзя передать в предварительную отрисовку, следует передаватьnonceвresumeToPipeableStream, только если вы не передаёте скрипты для предварительной отрисовки. -
resumeToPipeableStreamвыполняет повторную отрисовку от корня, пока не найдёт компонент, который не был полностью отрисован заранее. Полностью предварительно отрисованные компоненты (компонент и все его потомки завершили предварительную отрисовку) пропускаются целиком.
Использование
Дополнительная информация
Возобновление работает так же, как renderToReadableStream. Другие примеры см. в разделе об использовании renderToReadableStream. В разделе об использовании prerender приведены примеры использования именно prerenderToNodeStream.
© 2013–present Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://react.dev/reference/react-dom/server/resumeToPipeableStream