加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 如何删除/卸载嵌套的反应组件

发布时间:2020-12-15 05:04:48 所属栏目:百科 来源:网络整理
导读:我想卸载一个反应组件,它属于一个包含三个组件的父组件.父组件具有此渲染功能: render: function () { return ( div className={classes} Navbar ref="navbar"/ Home ref="home"/ Footer ref="footer"/ /div),handleNavbarClick: function () { // remove H
我想卸载一个反应组件,它属于一个包含三个组件的父组件.父组件具有此渲染功能:
render: function () {
  return (
    <div className={classes}>
      <Navbar ref="navbar"/>
      <Home ref="home"/>
      <Footer ref="footer"/>
    </div>
),handleNavbarClick: function () {
  // remove Home
}

如果用户然后单击导航栏中的链接并且我想要卸载Home组件,我该怎么做?似乎我唯一的选择是做这样的事情(取自react.js: removing a component),但这看起来非常严重:

render: function () {
  var home = this.state.remove_home ? null : <Home ref="home />
  return (
    <div className={classes}>
      <Navbar ref="navbar"/>
      {home}
      <Footer ref="footer"/>
    </div>
),handleNavbarClick: function () {
  this.setState({remove_home: true});
}

这是做适当的反应方式吗?

是的,你建议的解决方案
render: function () {
  var home = this.state.remove_home ? null : <Home ref="home" />
  return (
    <div className={classes}>
      <Navbar ref="navbar"/>
      {home}
      <Footer ref="footer"/>
    </div>
),handleNavbarClick: function () {
  this.setState({remove_home: true});
}

或多或少是使用React处理此问题的“正确”方法.请记住,渲染的目的是描述组件在任何给定点上的查看方式.接触DOM并执行手动操作,或执行其他类型的命令性工作,如“删除”元素,几乎总是错误的做法.

如果您关心语法,可以考虑内联或提取逻辑:

render: function () {
  return (
    <div className={classes}>
      <Navbar ref="navbar"/>
      {this.state.remove_home ? null : <Home ref="home" />}
      <Footer ref="footer"/>
    </div>
),

要么

render: function () {
  return (
    <div className={classes}>
      <Navbar ref="navbar"/>
      {!this.state.remove_home && <Home ref="home" />}
      <Footer ref="footer"/>
    </div>
),

要么

render: function () {
  return (
    <div className={classes}>
      <Navbar ref="navbar"/>
      {this.renderHome()}
      <Footer ref="footer"/>
    </div>
),renderHome: function() {
  if (!this.state.remove_home) {
    <Home ref="home" />
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读