在使用MUI useMediaQuery
钩子时,我注意到我的react应用程序存在错误并抛出错误,因为钩子最初无法识别正确的断点,然后页面很快重新呈现正确的值。
示例:
const mobile = useMediaQuery((theme) => theme.breakpoints.only('mobile'));
console.log(mobile)
控制台:
false
true
这是怎么回事?
在使用MUI useMediaQuery
钩子时,我注意到我的react应用程序存在错误并抛出错误,因为钩子最初无法识别正确的断点,然后页面很快重新呈现正确的值。
示例:
const mobile = useMediaQuery((theme) => theme.breakpoints.only('mobile'));
console.log(mobile)
控制台:
false
true
这是怎么回事?
2条答案
按热度按时间u0njafvf1#
这是
useMediaQuery
钩子的预期行为。在MUI文档中有解释:要执行服务器端的水合,钩子需要渲染两次。第一次使用false,即服务器的值,第二次使用解析的值。这种双通道渲染循环有一个缺点。慢一点如果只进行客户端渲染,则可以将此选项设置为true。
因此,要在第一个页面上获得正确的值,呈现
useMediaQuery
钩子中的noSsr
选项需要是true
。有两种选择:
1)每个组件:
2)
theme
对象全局:显然,这只会工作 * 没有 * 服务器端渲染。
下面的原始答案在Material-UI v4中有效,但
Hidden
组件在v5中已被弃用。原始答案:
我意识到,通过删除媒体查询并将其替换为Material-UI
<Hidden />
组件,它可以按照我想要的方式工作。sr4lhrrt2#
我也有同样的问题
到
这似乎有效https://mui.com/material-ui/migration/v5-component-changes/#hidden