generated from yandex-praktikum/client-server-template-with-vite
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathssr.tsx
30 lines (27 loc) · 940 Bytes
/
ssr.tsx
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
import React, { Suspense } from 'react'
import serialize from 'serialize-javascript'
import { Provider } from 'react-redux'
import { renderToString } from 'react-dom/server'
import { StaticRouter } from 'react-router-dom/server'
import { createStore } from './src/redux/store'
import App from './src/App'
import Spinner from './src/components/spinner/Spinner'
const store = createStore({})
export const renderHTML = async (url: string) => {
return renderToString(
<React.StrictMode>
<Suspense fallback={<Spinner />}>
<Provider store={store}>
<StaticRouter location={url}>
<App />
</StaticRouter>
</Provider>
</Suspense>
</React.StrictMode>
)
}
export const renderObject = (data: unknown) =>
serialize(data).replace(/</g, '\\\u003c')
export const state = `<script type='module'>{window.__PRELOADED_SERVER_STATE__ = ${renderObject(
store.getState()
)}}</script>`