我正在使用 react-static 生成一个静态网站。使用新useLayoutEffect
的钩子 API,我在静态渲染阶段收到此警告(与服务器端渲染相同的 API):
Warning: useLayoutEffect does nothing on the server, because its effect cannot be encoded into the server renderer's output format.
This will lead to a mismatch between the initial, non-hydrated UI and th e intended UI.
To avoid this, useLayoutEffect should only be used in components that render exclusively on the client.
当然,这是有道理的。但是当一个人确定不会有任何不匹配时,摆脱这个警告的好选择是什么?
在我的布局效果中,我只是在body
标签中添加了一些 CSS,因此在客户端的水合阶段不会出现任何不匹配(因为body
不是 React 的业务)。
React 强烈禁止使用条件钩子,但在那种非常特殊的情况下,做这样的事情是否有意义:
if(typeof window !== 'undefined')
useLayoutEffect(() => {
document.body.style.overflowY = loading ? 'hidden' : 'visible'
},
[loading]
)
什么是正确的方法?