我开始创建一个基于节点的同构React/Redux应用程序。该项目的一个要求是基于“移动”和“桌面”视图的“adapative”渲染特定组件。我已经实现了Redux动作和缩减器,以在状态中存储关于用户视图的屏幕信息(基于媒体查询 - “小”,“中”,“大”)。在调整状态/商店更新。默认状态是“小”。React/Redux同构/服务器端渲染和媒体查询
const defaultState = {
isMobile: true,
isTablet: false,
isDesktop: false,
sizes: {
small: true,
medium: false,
large: false,
huge: false,
},
};
在其中需要在基于屏幕尺寸的两个不同版本将被渲染的“自适应”组分,我简单地做一个:
如果(小)返回variation1
如果(中)返回变化2
所有的工作。
现在我面临两个问题:
我的应用是同构的,这意味着该标记也使得服务器端。服务器不知道用户的浏览器和媒体查询。因此,由于我的默认状态是“小”,服务器将始终呈现“variation1”。节点服务器是该站点的入口点。看起来渲染需要“延迟”(中间件?),并且服务器需要在React应用程序“交付”之前从客户端获取有关浏览器宽度的一些信息。任何想法如何解决这个问题?
由于渲染基于状态,因此即使浏览器大小为“桌面”,加载“变化1”后总能首先看到几毫秒(闪烁)。这是因为在用当前屏幕宽度更新状态之前,JS检测需要几毫秒。我认为这与上面的问题和默认状态一起玩。
我找不到任何解决方案1,但我想必须有一些同构和响应/自适应。
我很好奇“变体1”是什么。还不确定它是否与你的问题相关,但是变体只是视图的替代渲染,还是还有其他事情发生? –
“变化1”和“变化2”共享相同的数据,但视图看起来不同并且行为也不同。像1是手风琴种类,2只是静态布局。与我认为的问题无关。上述问题更为一般。 – Krad