背景
我正在将next.js用于服务器端渲染,并将react.js用于客户端。
目标
希望基于服务器端的窗口大小进行条件渲染。就像200px宽度的渲染A
组件和400px宽度的渲染B
组件一样。
问题
在服务器端,我们无法访问window对象,也无法了解客户端使用的设备。因此AFAIK我们无法在服务器端进行条件渲染。
想法
我已经考虑过一些解决方案,但是不知道有没有可能-
1.使用http请求将设备信息或窗口对象作为json发送。
2.不要在服务器端渲染条件组件,而在客户端重新渲染(水合)它们。
但是我不知道什么是最佳实践,什么效率更高。也欢迎提出新建议。
答案 0 :(得分:1)
通过在server.js中使用这段代码,您可以知道设备是否为移动设备
app.get('*', (req, res) => {
var ua = req.header('user-agent');
if (/mobile/i.test(ua)) {
//mobile code
} else {
// desktop code
}
});
您可以在react中传递此布尔值并使用它
答案 1 :(得分:1)
在这些条件下,我有几个地方。 最后,我决定只将客户端的条件组件呈现为问题最少,开销最小的解决方案。
其他解决方案:
如果它是具有重要SEO内容的组件,则需要对其进行渲染(如果将其渲染为错误的大小,直到根据屏幕大小对组件进行重新渲染,使它看起来更好一点)。切记,这种方法会在补液过程中引入一些错误,因为有时会重复div。您可以为组件设置新的密钥来修复它。
您还可以使用CSS隐藏内容。
答案 2 :(得分:1)
考虑使用下一种方法:
至少要注意接下来的情况: