【问题标题】:Should you hide modals or remove them from the DOM in React?你应该隐藏模式还是从 React 的 DOM 中删除它们?
【发布时间】:2018-02-02 09:19:01
【问题描述】:

我正在编写一个包含许多模态的 React 应用程序(但一次只有一个处于活动状态,没有嵌套的模态),我不确定这两种解决方案中的哪一种在处理显示和隐藏这些模态:

  1. 在父组件中有一个状态布尔变量,用于确定是否应显示模态框。如果此布尔变量为 false,则不渲染组件。如果是真的,渲染它。允许模态通过它可以利用的传入的 props 回调来影响此事件。示例 sn-ps:

    { this.state.prompt === "makePW" ? 
      <MakePassword closeModal={this.closePWModal} /> : 
      null
    }
    

    现在,在组件内,它始终是可见的,并且不控制其生命周期。如果它正在渲染,那么它是可见的。

  2. 始终在父组件中显示该组件,如下所示:

    <MakePassword />
    

    然后在组件本身内处理其整个生命周期。也就是说,组件将具有一个布尔状态变量来表示其可见性。这种方法的一些 sn-ps:

    <Modal open={this.state.open} onClose={this.closeModal}>
        <Modal.Header>Header</Modal.Header>
        <Modal.Content>Body</Modal.Content>
    </Modal>
    

我敢肯定,还有混合方法和其他解决方案。

无论如何,我想我的问题的本质是想知道显示和隐藏模式的最佳解决方案:是始终呈现它们并只是切换它们的可见性,还是实际上在从 DOM 中添加和删除它们之间切换?而且,模态本身一般应该控制其生命周期还是应该由父级控制?

【问题讨论】:

  • 要么。我个人不会在永远不会使用它们的组件上渲染模态框,而是将它们隐藏在使用的组件上。这样可以实现漂亮的过渡,并在不需要的地方节省开销。
  • 如果任一解决方案更可取,我应该使用哪些其他潜在标准来做出决定?我不认为我会使用过渡。

标签: javascript node.js reactjs modal-dialog electron


【解决方案1】:

我更喜欢第一个,但如果您想使用第二个,我会从 PureComponent 扩展 makepassword 组件以优化您的组件。

您可以从 React.PureComponent 继承,而不是手动编写 shouldComponentUpdate()。它相当于实现 shouldComponentUpdate() 对当前和以前的 props 和 state 进行浅比较。 - 源反应文档

class MakePassword extends React.PureComponent{
    ...
}

【讨论】:

    【解决方案2】:

    我认为这取决于您的应用程序。

    例如,React-Bootstrap modals 保留在 DOM 中,并允许漂亮的输入/输出动画。

    【讨论】:

    • 我不使用过渡,而且我认为我永远不会。如果是这种情况,将其从 DOM 中删除会更好吗?
    • 如果您不打算使用过渡,那么我同意没有太多理由将其保留在 DOM 中。
    • 对谁应该控制模式的显示/隐藏状态有什么意见吗?模态本身还是父容器?
    • 父级应该控制是否渲染一个 Modal 元素,否则你仍然会在组件树中得到一个 Modal 元素,不管它渲染null 或一些 JSX。
    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2014-05-25
    • 2023-02-07
    • 2023-04-06
    相关资源
    最近更新 更多