react-redux - 如何在反应服务器端渲染(Razzle)中集成 AMP?
问题描述
我一直在使用razzle通过 react+redux 进行服务器端渲染。现在,我需要在此设置中集成 AMP。我发现了几个nextJS的例子。我应该在主 HTML 中添加 amp.js 还是应该有单独的 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>`
客户端.js
hydrate(
<Provider store={store}>
<ThemeProvider theme={theme}>
<BrowserRouter>
<App />
</BrowserRouter>
</ThemeProvider>
</Provider> ,
document.getElementById('root'),
() => {
const jssStyles = document.getElementById('jss-ssr');
if (jssStyles && 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();
解决方案
推荐阅读
- mysql - mysql事务 - 更新条件匹配相同字段的字段
- r - 使用 Tensorfllow、keras 和 TidyR 和 R studio 的分类图像模型的问题
- material-ui - 使用 Gatsby + Material UI。试图制作一个导航栏,但按钮居中。我究竟做错了什么?
- html - grid-auto-columns 不生成自动列
- android - 如何实现 ViewModel 保存状态
- python - 如何在 Python 中启动 Jupyter Lab 中的后台进程?
- java - Equivalent of !Keyboard.next() in LWJGL 3 / GLFW?
- python - api data to json file split per day, then merged
- node.js - Force http in heroku
- ios - How to reliably store the email for Sign in with Apple?