#react-redux #server-side-rendering #amp-html #razzle
#react-redux #Рендеринг на стороне сервера #amp-html #razzle
Вопрос:
Я использую razzle для рендеринга на стороне сервера с react redux. Теперь мне нужно интегрировать AMP в эту настройку. Я нашел несколько примеров с NextJS. Должен ли я добавить amp.js в основном HTML или там должны быть отдельные server.js для рендеринга AMP-страниц и как это сделать. как обрабатывать amp
маршруты относительно существующих маршрутов.
Вот мой server.js
const markup = renderToString(
sheets.collect(
<Provider store={store}>
<ThemeProvider theme={theme}>
<StaticRouter location={req.url} context={context}>
<App />
</StaticRouter>
</ThemeProvider>
</Provider>
));
const css = sheets.toString();
const finalState = store.getState();
const html = `<!doctype html>
<html lang="">
<head>
${assets.client.css
? `<link rel="stylesheet" href="${assets.client.css}">`
: ''}
${css ? `<style id='jss-ssr'>${css}</style>` : ''}
${process.env.NODE_ENV === 'production'
? `<script src="${assets.client.js}" defer></script>`
: `<script src="${assets.client.js}" defer crossorigin></script>`}
</head>
<body>
<div id="root">${markup}</div>
<script>
window.__PRELOADED_STATE__ = ${serialize(finalState)}
</script>
</body>
</html>`
Client.js
hydrate(
<Provider store={store}>
<ThemeProvider theme={theme}>
<BrowserRouter>
<App />
</BrowserRouter>
</ThemeProvider>
</Provider> ,
document.getElementById('root'),
() => {
const jssStyles = document.getElementById('jss-ssr');
if (jssStyles amp;amp; jssStyles.parentNode)
jssStyles.parentNode.removeChild(jssStyles);
}
);
if (module.hot) {
module.hot.accept('../common/containers/App', () => {
hydrate(
<Provider store={store}>
<ThemeProvider theme={theme}>
<BrowserRouter>
<App />
</BrowserRouter>
</ThemeProvider>
</Provider>,
document.getElementById('root')
);
});
}
serviceWorker.register();
Комментарии:
1. нашли способ сделать это?
2. @karma еще нет.