在 ReactJS 中显示/隐藏组件

2024-01-16

我们现在在使用 React 的过程中遇到了一些问题,但是它kinda归结为我们如何使用 React 的一部分。

我们应该如何显示/隐藏子组件?

这就是我们编码的方式(这只是我们组件的片段)...

_click: function() {
  if ($('#add-here').is(':empty'))
    React.render(<Child />, $('#add-here')[0]);
  else
    React.unmountComponentAtNode($('#add-here')[0]);
},
render: function() {
  return(
    <div>
      <div onClick={this._click}>Parent - click me to add child</div>
      <div id="add-here"></div>
    </div>
  )
}

最近我一直在阅读一些例子,就像它应该是这样的:

getInitialState: function () {
  return { showChild: false };
},
_click: function() {
  this.setState({showChild: !this.state.showChild});
},
render: function() {
  return(
    <div>
      <div onClick={this._click}>Parent - click me to add child</div>
      {this.state.showChild ? <Child /> : null}
    </div>
  )
}

我应该使用 React.render() 吗?它似乎停止了各种事情,比如shouldComponentUpdate级联到孩子之类的事情e.stopPropagation...


我提供了一个遵循第二种方法的工作示例。更新组件的状态是显示/隐藏子组件的首选方式。

假设你有这个容器:

<div id="container">
</div>

您可以使用现代 Javascript(ES6,第一个示例)或经典 JavaScript(ES5,第二个示例)来实现组件逻辑:

使用 ES6 显示/隐藏组件

在 JSFiddle 上尝试这个演示 https://jsfiddle.net/w4q5mwvw/441/

class Child extends React.Component {
  render() {
    return (<div>I'm the child</div>);
  }
}

class ShowHide extends React.Component {
  constructor() {
    super();
    this.state = {
      childVisible: false
    }
  }

  render() {
    return (
      <div>
        <div onClick={() => this.onClick()}>
          Parent - click me to show/hide my child
        </div>
        {
          this.state.childVisible
            ? <Child />
            : null
        }
      </div>
    )
  }

  onClick() {
    this.setState(prevState => ({ childVisible: !prevState.childVisible }));
  }
};

React.render(<ShowHide />, document.getElementById('container'));

使用 ES5 显示/隐藏组件

在 JSFiddle 上尝试这个演示 https://jsfiddle.net/w4q5mwvw/440/

var Child = React.createClass({
  render: function() {
    return (<div>I'm the child</div>);
  }
});

var ShowHide = React.createClass({
  getInitialState: function () {
    return { childVisible: false };
  },

  render: function() {
    return (
      <div>
        <div onClick={this.onClick}>
          Parent - click me to show/hide my child
        </div>
        {
          this.state.childVisible
            ? <Child />
            : null
        }
      </div>
    )
  },

  onClick: function() {
    this.setState({childVisible: !this.state.childVisible});
  }
});

React.render(<ShowHide />, document.body);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ReactJS 中显示/隐藏组件 的相关文章

随机推荐

  • Paper.js 无法正确调整画布大小

    我正在尝试Paper js http paperjs org 为了好玩 但似乎我已经在一开始就陷入困境 Adding resize true to the canvas标签应该使元素与浏览器窗口一样高和宽 然而 这样做会导致一些相当奇怪的行
  • 我如何在 Eclipse 中调试 openerp 代码 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我怎样才能在 eclipse 中调试
  • 使用 IoC 在 SOA 应用程序中通过 DDD 进行验证

    在我的服务外观层中 我有一个服务类 其方法 操作接受 DTO 数据契约 对象 AutoMapper 用于将此 DTO 映射到我的域对象的实例以应用任何更改 该请求被传递到我的域服务 该服务执行实际工作 该方法可能如下所示 public En
  • 如何在 Angular 2 中使用 FullCalendar

    我对 Angular 2 相当陌生 正在尝试掌握如何将 Angular 2 与现有的 Javascript UI 框架库集成 现在我正在尝试使用 jQuery 插件http fullcalendar io http fullcalendar
  • 投影深度的法线

    我想计算法线贴图N i j 从深度图D i j where i j 描述 2D 像素位置 这里讨论这个问题的基本情况 使用相邻像素叉积从深度图像计算表面法线 https stackoverflow com questions 3464410
  • MVC @Url.Content 与 @Url.Action

    我在网上查过但无法找到两者之间的区别 使用 Url Content vs Url Action Url Content当您希望解析站点上任何文件或资源的 URL 并且将相对路径传递给它时使用 Url Content path file ht
  • 两个相同的 URL,但参数顺序不同:内容重复?

    我自己的 CMS 会自动向页面中的链接添加新参数以指定给定语言 它工作得很好 但它并不总是将 var 放在相同的位置 给我一个指向相同页面 语言的链接 www xxx yy index php mod blog page 3 lang en
  • Android WebView如何处理数据?

    Android的WebView可以使用本地存储 Service Workers IndexedDB和许多其他功能 但是 我无法找到有关此数据存储位置以及何时清除的任何信息 通过一些测试 我已经能够确定它们没有存储在缓存中 因为我可以删除缓存
  • CSS 仅适用于 IE 8

    我需要为某些项目设置仅适用于 IE 8 的样式 如果我这样做 然后我这样做 会发生什么 我找到了这个链接到之前的SO问题 https stackoverflow com questions 3958913 fix css if lt ie
  • LINQ to Entities 无法识别 ElementAt 方法

    我正在使用该方法Queryable ElementAt Int32 获取查询结果的特定元素 IQueryable
  • Android ListView下拉刷新

    是否有像 iOS 中那样存在的默认功能来更新列表视图 或者任何其他图书馆 现在支持库支持此功能并称为swipeRefreshLayout https developer android com reference android suppo
  • React-native:动态更新堆栈导航器中的标题标题

    我为标题标题 堆栈导航器 制作了一个自定义组件 它显示用户名以及一些图像 在此页面上我必须编辑用户名并成功也在标题中更新它 所以我的问题是如何动态更改 更新标题 这可以使用导航道具来完成 您可以使用this props navigation
  • iOS6旋转问题

    我知道你必须使用IOS6的新旋转方法 但似乎我写的方法不起作用 我将 plist 文件设置为允许所有旋转 但是不是肖像颠倒 然后我的里面有以下内容应用程序委托 self navController UINavigationControlle
  • 为什么我可以在 JavaScript 中定义函数之前使用该函数?

    即使在不同的浏览器中 此代码也始终有效 function fooCheck alert internalFoo We are using internalFoo here return internalFoo And here even t
  • 使用jpype启动jvm时出现分段错误

    我正在尝试在我的 Python 代码中使用 java sutime 直到昨天 代码一直运行良好 但现在以分段错误结束 问题似乎来自于 jpype startJVM getDefaultJVMPath 该函数以分段错误结束 默认的 JVM 路
  • 有条件的列的计数器缓存?

    我对计数器缓存的概念很陌生 并且我的应用程序主页之一的加载时间有些天文数字 我相信我需要继续下去 我需要实现的大多数计数器缓存都附加了某些 简单 条件 例如 这是一个常见的查询 projects employee projects wher
  • 如何使用 ocLazyLoad 进行依赖注入

    我正在使用 ocLazyLoad 并且我有一些外部角度库 例如Chart js and pascalprecht translate 并且我需要在某些路由中延迟加载它们 如您所知 对于常见的角度模块依赖注入应该是这样的 var angula
  • 如何模拟 HttpServletRequest? [复制]

    这个问题在这里已经有答案了 我有一个查找查询参数并返回布尔值的函数 public static Boolean getBooleanFromRequest HttpServletRequest request String key Bool
  • 在 Ruby on Rails 3 上上传多个文件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将多张图片上传到我的 Rails 3 应用程序 我目前正在使用 Paperclip 上传图片 并且我
  • 在 ReactJS 中显示/隐藏组件

    我们现在在使用 React 的过程中遇到了一些问题 但是它kinda归结为我们如何使用 React 的一部分 我们应该如何显示 隐藏子组件 这就是我们编码的方式 这只是我们组件的片段 click function if add here i