我有一个使用 ReactJS 构建的响应式 Web 应用程序,我希望有一天能够支持服务器端渲染。
根据视口大小,应用程序布局/行为会发生变化。但是所有这些改变不仅可以通过纯 CSS 媒体查询来完成:JS 行为,而且底层的 HTML 结构也必须根据宽度进行更改。
例如我可以有:
在 800px 宽度下:
<div class="app">
<div class="menu-mobile">...</div>
<div class="content">...</div>
<div class="mobile-left-menu">...</div>
<div class="footer-mobile">...</div>
</div>
宽度超过 800 像素:
<div class="app">
<div class="menu">...</div>
<div class="main">
<div class="left-menu">...</div>
<div class="content">...</div>
<div class="right-menu">...</div>
</div>
<div class="footer">...</div>
</div>
现在,我想为该应用程序使用服务器端渲染。但是在服务器上我没有宽度,所以我不知道返回给客户端的 HTML 结构。
请注意,我不是在寻找使用静态默认服务器端断点的解决方案,而是在客户端更正应用程序。我正在寻找一种解决方案,可以根据其设备向客户端返回正确的 html 结构。因此,如果他在浏览器上禁用 javascript,它应该可以正常工作。
有人可能会争辩说,我可以渲染两者所需的 html,并使用纯 CSS 媒体查询和隐藏/显示所需的部分display: none
,但这会使应用程序复杂化并使其渲染许多未使用的 html 元素,因为通常用户不太可能移动断点上方/下方(我的意思是,如果他有移动设备,则永远不会使用桌面的 html 元素)
此外,如果我想使用内联样式,它会变得复杂,因为我必须在服务器上渲染这些内联样式以获得正确的宽度。
我看到有些人正在考虑嗅探浏览器 UA 以估计他们的视口大小。但即使有一些不安全的屏幕尺寸检测,我也不确定我们能否知道服务器端的设备屏幕方向。
我可以做些什么来解决这个问题吗?