【问题标题】:Is there a way to use Material-UI Collapse and Drawer without Transition?有没有办法在没有过渡的情况下使用 Material-UI Collapse 和 Drawer?
【发布时间】:2018-08-02 00:23:48
【问题描述】:

我正在使用 material-ui v1 beta 的 Collapse 和 Drawer 在移动网站上创建导航。导航有很多nested lists

当我单击展开/折叠折叠时,在折叠开始动画之前会有明显的延迟。 Drawer 也会出现同样的问题。

Collapse 和 Drawer 都使用 Transition 来制作动画。转换由react-transition-group提供。

为了提高响应能力,我计划使用没有过渡的折叠和抽屉(我不介意没有动画)。有没有办法在没有过渡的情况下使用折叠和抽屉?

附:我检查了 Collapse 和 Drawer 的文档,没有找到禁用转换的道具或标志。

【问题讨论】:

    标签: material-ui react-transition-group


    【解决方案1】:

    Drawer 暴露了一个 transitionDuration 属性:

    过渡的持续时间,以毫秒为单位。您可以为所有转换指定一个超时,或单独为一个对象指定一个超时。

    将此设置为零可消除过渡效果:

    <Drawer transitionDuration={0} ...>
    

    Collapse 提供了一个具有类似描述的 timeout 属性:

    过渡的持续时间,以毫秒为单位。您可以为所有转换指定一个超时,或者单独为一个对象指定一个超时。 设置为“自动”以根据高度自动计算过渡时间。

    同样,将其设置为零会消除效果。这个codesandbox是对material-ui嵌套列表demo的修改。

    请记住,Collapse 只是使用Grow 转换的元素的包装器。如果您不希望动画发生,您可以根据状态有条件地渲染项目。有关示例,请参阅此 other codesandbox

    【讨论】:

    • 设置timeout 消除了Collapse 的Transition 效果,但不会提高其性能。我在问题中提到的问题(“在折叠开始动画之前有明显的延迟”)仍然存在。
    • Collapse 组件本身是具有该转换的元素的包装器。你不必使用它。如果您不希望动画发生,您可以根据状态有条件地渲染子项。
    • 啊,是的,你是对的。我不需要在我的用例中使用 Collapse。但是抽屉呢?
    • Drawer 使用 Slide 似乎没有受到这个问题的阻碍。我认为 Collapse 的问题可能是由于它支持 auto 超时。
    • 我明白了。所以我对 Collapse 和 Drawer 的问题实际上是两个独立的问题。尽管如此,我仍然对抽屉有同样的问题。当我单击按钮以显示导航(使用抽屉)时,在抽屉开始滑入之前会有明显的延迟。我计划从抽屉中删除幻灯片以提高性能。可能吗?或者也许还有其他方法?
    【解决方案2】:

    我遇到了类似的问题,即使用 &lt;Collapse /&gt; 面板渲染 material-ui &lt;Card /&gt; 的虚拟化列表以获得手风琴效果。

    问题在于&lt;Collapse /&gt; 转换行为。即使将其timeout 属性设置为0 以希望没有延迟,它仍然会导致延迟,即使在componentDidMount 生命周期之后也会导致它完成渲染。 &lt;Drawer /&gt; transitionDuration 道具也是如此。


    解决方案

    只需完全移除 &lt;Collapse /&gt;&lt;Drawer /&gt; 组件即可。只需使用状态来切换下划线子组件(比如说&lt;List /&gt;)样式显示。

    但如果真的要包含动画效果,那就用react-virtuoso而不是react-window

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 2020-03-22
      • 2019-06-17
      • 1970-01-01
      • 2016-01-10
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多