// file: react_test.ts
// it just for my note
import React from "https://esm.sh/react@18.2.0";
import ReactDomServer from "https://esm.sh/react-dom@18.2.0/server";
import { Handler, serve } from "https://deno.land/std@0.161.0/http/server.ts";
const Module = {
default: () =>
React.createElement("div", {
hello: "World",
}, "Dynamic Modules"),
};
const DynComp = React.lazy(async () => {
await new Promise((resolve) => {
setTimeout(() => {
resolve(1);
}, 5000);
});
return Module;
});
const Component = (props: { hello?: string }) => {
return React.createElement("div", {}, [
React.createElement("h3", {}, props?.hello ?? "Hello React"),
React.createElement(React.Suspense, {
fallback: React.createElement("span", {}, "Loading..."),
}, [
React.createElement(DynComp),
]),
React.createElement("p", {}, "I am here"),
]);
};
//await stream.allReady
const ac = new AbortController();
const handler: Handler = async (req) => {
const stream = await ReactDomServer.renderToReadableStream(
React.createElement(Component, { hello: "Hello World" }),
{ signal: ac.signal },
);
return new Response(stream, {
headers: {
"content-type": "text/html; charset=utf-8",
},
});
};
await serve(handler, { port: 3000, signal: ac.signal });
Created
October 31, 2022 06:19
-
-
Save arisris/a6108e2f42a99dc76bba1e0aaf1410f3 to your computer and use it in GitHub Desktop.
React SSR Suspense fallback & streaming suport : Example Code
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment