-
-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathindex.jsx
More file actions
48 lines (40 loc) · 1.49 KB
/
index.jsx
File metadata and controls
48 lines (40 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { createRoot, hydrateRoot } from 'react-dom/client';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { StaticRouter } from 'react-router-dom/server';
import { Header } from './components/Header.jsx';
import { Home } from './pages/Home/index.jsx';
import { NotFound } from './pages/_404.jsx';
import './style.css';
// Is this really the going practice?
const Router = typeof window !== 'undefined' ? BrowserRouter : StaticRouter;
export function App({ url }) {
return (
<Router location={url}>
<Header />
<main>
<Routes>
<Route path="/" element={<Home />} />
<Route path="*" element={<NotFound />} />
</Routes>
</main>
</Router>
);
}
if (typeof window !== 'undefined') {
const target = document.getElementById('app');
import.meta.env.DEV ? createRoot(target).render(<App />) : hydrateRoot(target, <App />);
}
export async function prerender(data) {
const { prerender: reactPrerender } = await import('react-dom/static');
const { parseLinks } = await import('vite-prerender-plugin/parse');
const { prelude } = await reactPrerender(<App {...data} />);
const reader = prelude.getReader();
let html = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
html += Buffer.from(value).toString('utf-8');
}
const links = parseLinks(html);
return { html, links };
}