From ae9dc254306b6cedec336f6a0b8faf5a44bae026 Mon Sep 17 00:00:00 2001 From: MadCcc <1075746765@qq.com> Date: Mon, 1 Apr 2024 14:24:08 +0800 Subject: [PATCH] feat: SSR support useServerInsertedHTML (#12247) * feat: SSR support useServerInsertedHTML * feat: ssr insert html * fix: string template * chore: update lock --- examples/ssr-demo/package.json | 2 + examples/ssr-demo/src/layouts/index.tsx | 23 ++++ examples/ssr-demo/src/pages/index.tsx | 14 ++- .../routePreloadOnLoad/routePreloadOnLoad.ts | 2 +- packages/server/src/ssr.ts | 106 +++++++++++++----- pnpm-lock.yaml | 38 ++++--- 6 files changed, 137 insertions(+), 48 deletions(-) create mode 100644 examples/ssr-demo/src/layouts/index.tsx diff --git a/examples/ssr-demo/package.json b/examples/ssr-demo/package.json index 564ea9a69734..3b81a184639b 100644 --- a/examples/ssr-demo/package.json +++ b/examples/ssr-demo/package.json @@ -9,6 +9,8 @@ "start:prod": "node ./production-server.js" }, "dependencies": { + "@ant-design/cssinjs": "^1.18.5", + "antd": "^5", "express": "4.18.2", "umi": "workspace:*" } diff --git a/examples/ssr-demo/src/layouts/index.tsx b/examples/ssr-demo/src/layouts/index.tsx new file mode 100644 index 000000000000..06c6f7ea086c --- /dev/null +++ b/examples/ssr-demo/src/layouts/index.tsx @@ -0,0 +1,23 @@ +import { createCache, extractStyle, StyleProvider } from '@ant-design/cssinjs'; +import { useState } from 'react'; +import { Outlet, useServerInsertedHTML } from 'umi'; + +export default function Layout() { + const [cssCache] = useState(() => createCache()); + + useServerInsertedHTML(() => { + const style = extractStyle(cssCache, { plain: true }); + return ( + + ); + }); + + return ( + + + + ); +} diff --git a/examples/ssr-demo/src/pages/index.tsx b/examples/ssr-demo/src/pages/index.tsx index 279b00b9d5c1..c12ea05b1ed6 100644 --- a/examples/ssr-demo/src/pages/index.tsx +++ b/examples/ssr-demo/src/pages/index.tsx @@ -1,3 +1,5 @@ +import { Input } from 'antd'; +import { useId } from 'react'; import { Link, MetadataLoader, @@ -22,16 +24,26 @@ export default function HomePage() { const serverLoaderData = useServerLoaderData(); useServerInsertedHTML(() => { - return
inserted html
; + return ( + + ); }); + const id = useId(); + return (

Hello~

+

id: {id}

This is index.tsx

I should be pink

I should be cyan