我开始创建一个基于Node的同构React/Redux应用程序。该项目的要求之一是根据“移动”和“桌面”视图进行特定组件的“自适应”渲染。我已经实现了Redux action和reducer来存储关于用户视图的屏幕信息(基于媒体查询 - “小”,“中”,“大”)在状态中。调整大小时,状态/存储会得到更新。默认状态为“小”。
const defaultState = {
isMobile: true,
isTablet: false,
isDesktop: false,
sizes: {
small: true,
medium: false,
large: false,
huge: false,
},
};
在需要根据屏幕尺寸"自适应"渲染两个不同版本的组件中,我只需这样做:
一切运作正常。如果 (小屏) 返回变化1
如果 (中屏) 返回变化2
现在我面临两个问题:
- 我的应用程序是同构的,这意味着标记也会在服务器端呈现。服务器不知道用户的浏览器和媒体查询信息。因此,由于我的默认状态是"小屏",服务器将始终呈现"变化1"。节点服务器是站点的入口点。看起来呈现需要被"延迟"(中间件?),并且服务器需要在React应用程序被"传递"之前从客户端获取有关浏览器宽度的一些信息。您有任何解决方案吗?
- 由于呈现是基于状态的,因此加载后"变化1"可能始终在前几毫秒内(闪烁)可见,即使浏览器尺寸是"桌面"。这是因为JS检测在状态更新为当前屏幕宽度之前需要几毫秒时间。我认为这与上述问题和默认状态有关。