material-ui中的隐藏组件,如何防止渲染?

罗马98

到目前为止,我一直在使用nextJS和material-ui取得巨大成功。
但是,最近我遇到了一个概念性的问题:
每当应用程序在服务器上呈现时,我都不希望它在到达客户端时就进行重排。
由于我在台式机和移动设备之间渲染布局的方式有所不同,因此我一直在使用这些<Hidden implementation='css'/>组件来分离组件。implementation=css之所以使用,是因为我不能依赖窗口宽度,因为它在服务器上将不可用。
我今天的主要问题是,即使在屏幕上显示了正确的版本,也呈现了桌面版本和移动版本,这会导致不必要的逻辑执行(尤其是api调用)。
我认为我做错了什么,但不知道如何解决。
'理想'的方式将是一个类似的组件,<Hidden/>而不是仅仅隐藏一个已经渲染的组件,它根本不会渲染它。而且window.innerWidth由于我关心SSR,所以我当然不能使用...

如果有人有想法,我将不胜感激。

罗马98

因此,我最终发现不是一个完美的解决方案,而是针对我的情况的最佳解决方案:
当渲染在服务器端完成时,我正在使用material-ui <Hidden implementation='css'/>(使用media-query react组件也可以实现),因此组件同时呈现桌面版本和移动版本,然后立即隐藏正确的版本(屏幕上没有flickr)。
然后,当在客户端完成渲染时,我正在计算,window.innerWidth以便该组件不会针对每个状态更改重新计算移动版本和桌面版本。
这是我的代码:

<Fragment>
  <Display format="mobile" css>
    {process.browser
      ? this.state.width < 960 ? mobile() : null
      : mobile()}
  </Display>
  <Display format="tablet-desktop" css>
    {process.browser
      ? this.state.width >= 960 ? tablet_desktop() : null
      : tablet_desktop()}
  </Display>
</Fragment>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有Material-ui列表的抽屉中的渲染组件

如何使用 Material-UI AppBar onTitleClick 属性在 React 中渲染新组件?

Material-ui V5如何替换隐藏组件

Material UI中缺少组件

如何在 React 中渲染 Material UI 图标?

Material UI TreeView 递归渲染是如何工作的?

无法在 Material UI 中渲染 svg

无法在 Material UI 中渲染 svg

如何摆脱Material UI容器组件中的填充?

如何根据URL更改Material UI组件中的道具?

在表单中如何使用Material UI的React评分组件?

如何在组件中运行 Material UI 示例片段

如何在Material UI中的Avatar组件上使用阴影

如何在 React Material UI 的 AppBar 组件中设置容器?

在React中渲染Material UI组件的内容时出现问题

我可以在不重新渲染组件的情况下更新 Material-UI 中的样式吗?

如何防止更改Material-UI复选框组件的大小

Material UI“Dialog”组件在初始页面渲染时打开

material-ui中的<Fade>仅禁用该组件的可见性。如何获得淡入淡出效果并实际上隐藏组件?

如何获取 Material UI 'Autocomplete' 组件的名称?

如何导入material-ui组件?

如何从父组件打开 Material UI Modal?

如何忽略组件的Material UI主题样式?

material-ui-next组件被初始化为隐藏

数据更改时如何刷新ReactJS中的Material-Table(Material-ui)组件

如何在Material UI Drawer组件中包含主要组件的宽度?

如何通过单击父组件中的 Material UI 图标来控制子组件

渲染方法顶部的material-ui组件的存在会影响后续组件的样式

如何在Material-ui中隐藏onFocus上的自动完成标签?