Skip to content

Commit 6451c74

Browse files
committed
Overrode vite hydrate for custom nav/context
The built-in vite hydrate does too much - handles navigation, for example, which is no good because router needs to handle it
1 parent 55d8b13 commit 6451c74

File tree

1 file changed

+27
-2
lines changed
  • packages/plugin-rsc/examples/navigation/src

1 file changed

+27
-2
lines changed
Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1-
import { hydrate } from '@vitejs/plugin-rsc/extra/browser'
1+
import "@vitejs/plugin-rsc/dist-DEF94lDJ";
2+
import "@vitejs/plugin-rsc/browser-QWbIPyhO";
3+
// @ts-ignore
4+
import { createFromFetch, createFromReadableStream } from "@vitejs/plugin-rsc/browser-D8OPzpF5";
5+
import "@vitejs/plugin-rsc/browser-LizIyxet";
6+
// @ts-ignore
7+
import { rscStream } from "@vitejs/plugin-rsc/client-edAdk2GF";
8+
import React from "react";
9+
import ReactDomClient from "react-dom/client";
10+
import { jsx } from "react/jsx-runtime";
11+
import { BundlerContext } from 'navigation-react';
212

3-
hydrate()
13+
//#region src/extra/browser.tsx
14+
async function hydrate() {
15+
const initialPayload = await createFromReadableStream(rscStream);
16+
function BrowserRoot() {
17+
const [payload, setPayload_] = React.useState(initialPayload);
18+
const bundler = React.useMemo(() => ({setRoot: setPayload_, deserialize: fetchRSC}), []);
19+
return jsx(BundlerContext.Provider, { value: bundler, children: payload.root });
20+
}
21+
const browserRoot = /* @__PURE__ */ jsx(React.StrictMode, { children: /* @__PURE__ */ jsx(BrowserRoot, {}) });
22+
ReactDomClient.hydrateRoot(document, browserRoot, { formState: initialPayload.formState });
23+
}
24+
async function fetchRSC(request: any) {
25+
const payload = await createFromFetch(fetch(request));
26+
return payload.root;
27+
}
28+
hydrate();

0 commit comments

Comments
 (0)