服务端渲染和客户端渲染className不匹配?

发布于 2022-09-12 00:26:07 字数 312 浏览 15 评论 0

需求是这样的:要根据浏览器是否出现滚动条给元素赋予不同的className

<div className={isScroll?'a b':'a'}>abc</div>

但判断是否出现滚动条只能在客户端实现,这就造成了客户端和服务端的className不同,出现以下警告:

Prop className did not match. Server: "a" Client: "a b"

求解这种情况如何处理呢?(react的SSR)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

滥情空心 2022-09-19 00:26:07

逻辑有问题,是否有滚动条只能渲染完再判断,浏览器也存在分辨率差异,有些有滚动条有些没有。

奢欲 2022-09-19 00:26:07

使用client-only包裹 仅在客户端渲染

弄潮 2022-09-19 00:26:07

可不可以将判断isScroll的逻辑放在一个setTimeout中,强制将判断变为异步,这样应该就能保证当客户端开始渲染的时候,没有马上就计算isScroll的值,这样两端就会一样了。而异步线程执行完之后才会改变className。可以这样试试行不行

相守太难 2022-09-19 00:26:07

可以把 isScroll放在react的render完成的时候去做这件事 否则二次渲染不一致 不仅会抛出错误还会导致样式错乱

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文