【问题标题】:How to show/hide ReactJS components如何显示/隐藏 ReactJS 组件
【发布时间】:2014-03-30 11:22:22
【问题描述】:

尝试学习 ReactJS.. 但让我感到困惑的是组件的渲染。我见过的每个示例都定义了一个 React 组件类,最后都有类似的内容:

React.renderComponent(
  <comp attr="value"" />,
  document.getElementById('comp')
);

我知道它用我的组件替换了“comp”元素。这很好。但似乎如果我加载 20 个组件,所有 20 个渲染。但是,我只想渲染一些而不是全部,而是在我的 SPA 中全部使用。我正在使用 DirectorJS 路由器,根据用户是否登录和/或访问某些链接,我只想显示一个或多个组件。我似乎找不到任何关于如何动态管理显示或隐藏反应组件的信息/示例/教程。更重要的是,我真正想做的是根据单击的链接加载部分内容,并且在这些部分中他们将使用反应组件,所以只有在那个时候加载/使用组件。这可能吗..如果是这样我该如何处理?我可以在第一次加载应用程序时加载 20 多个组件,但我更愿意仅在加载显示组件的部分时加载它们。

【问题讨论】:

    标签: javascript single-page-application reactjs


    【解决方案1】:

    首先,只渲染必要的内容。它更容易跟踪,而且速度更快。

    要真正“在页面之间交换”,就像在您的状态/道具中设置一个变量一样简单,然后使用该变量有条件地呈现您需要的任何内容。选择性地渲染你想要的任何东西的角色自然而然地交给了父组件。这是导演的工作小提琴:http://jsfiddle.net/L7mua/3/

    关键部分,在App中:

    render: function() {
      var partial;
      if (this.state.currentPage === 'home') {
        partial = <Home />;
      } else if (this.state.currentPage === 'bio') {
        partial = <Bio />;
      } else {
        // I don't know, your default page
        // if you don't assign anything to partial here, you'll render nothing
        // (undefined). In another situation you'd use the same concept to
        // toggle between show/hide, aka render something/undefined (or null)
      }
      return (
        <div>
          <div>I am a menu that stays here</div>
          <a href="#/home">Home</a> <a href="#/bio">Bio</a>
          {partial}
        </div>
      );
    }
    

    请注意,除了看起来像 HTML 的 JSX 语法之外,您实际上只是在使用 JavaScript。条件仍然有效,迭代仍然有效,等等。

    【讨论】:

    • 优秀。谢谢你。所以 React.renderComponent() 部分只设置了它将渲染到的元素。但是 render() 方法决定了它渲染什么以及是否渲染?
    • 不做详细介绍,只需将renderComponent 视为第一个render,您需要将它挂载到一些 真正的DOM 节点中。所以真的,它并没有那么特别,作为一种替代结构,你可以让路由器位于最顶层(在任何组件之外)并执行以下操作:'/home': React.renderComponent(,文件.body);就像我说的,条件句仍然是条件句。没有您必须掌握的任意替代语法/概念。随意使用常见的 JS 逻辑 =)。
    • 在两个 cmets 中,您已经为我揭开了这个谜团。 :) 从所有示例中,renderComponent() 始终与实际类创建在同一位代码中,因此我不清楚您是否可以在您想要的时候以 JS 函数呈现组件展示下。所以谢谢你澄清这个!
    • 好吧..又卡了一次..我删除了 React.renderComponent(, document.getElementById('dialog'));从定义组件的 JS 类中。相反,如果用户单击导致对话框显示的给定链接,我只想在 JS 函数中调用 rednerComponent。如何将 更改为 JS 等效项,以便它可以在我的 JS 函数调用中工作?
    • 格式化在这里会很困难。你能把这个分成另一个问题吗?
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    相关资源
    最近更新 更多