我使用 Next.js 和 React 创建了一个网站,并且非常喜欢声明一个 js 变量来定义这样的组件样式:
const foo = {
fontSize: '12px',
};
在渲染方法中,我这样做:
render() {
return (
<div style={foo}>bar</div>
);
}
使用 ESLint,我可以快速找到未使用的样式/变量(如果引用已消失)并保持代码整洁。因此,我不会像这样使用<style>
或样式化 jsx:
render() {
return (
<div>
<style>
.foo {
font-size: '12px';
}
</style>
<div className="foo">bar</div>
</div>
);
}
问题
仅使用 js 变量而不是使用 js 变量的问题<style>
是我无法应用媒体查询来定位不同的屏幕尺寸,所以我想我可以使用 javascript 解决这个问题:
render() {
// Bigger font size for smaller devices
if (windowWidth < 768) foo.fontSize = '24px';
return (
<div style={foo}>bar</div>
);
}
我解决windowWidth
了这个解决方法:在 ReactJS 中获取视口/窗口高度。只要渲染发生在客户端,这就会很好地工作。这种方法的问题在于 Next.js 将首先在服务器端呈现视图。此时,窗口/屏幕大小未知,因此windowWidth = 0
. 因此,我认为客户端在从服务器接收到初始呈现的页面后必须重新呈现。
问题):
如何强制客户端在服务器初始渲染后立即重新渲染以确定 的值
windowWidth
?这是一个好的做法/解决方案还是会导致性能问题或元素闪烁?