当前位置: 首页 > 知识库问答 >
问题:

React.Component和React.PureComponent显示不同的行为

龚运乾
2023-03-14

我在下面添加可运行的代码段。第一个是React.PureComponent版本

class App extends React.PureComponent {
 
  render() {
    console.log('re-render')
    return (
    <div>
     <span>I am parent</span>
     {this.props.children}
    </div>
    )
  }
}

  ReactDOM.render(
    <App>
      <div>
        I am the child
      </div>
    </App>,
    document.getElementById('app')
  )


//setTimeout(render, 1000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
class App extends React.Component {
  
  render() {
    console.log('re-render')
    return (
    <div>
     <span>I am parent</span>
     {this.props.children}
    </div>
    )
  }
}

  ReactDOM.render(
    <App>
      <div>
        I am the child
      </div>
    </App>,
    document.getElementById('app')
  )


//setTimeout(render, 1000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>

为什么第二个成功运行,但第一个没有??我试图寻找原因,但没有找到任何好的理由

共有3个答案

施知
2023-03-14

React.PureComponent在您的情况下不起作用,因为您使用的是旧版本的ReactJS。实际上,2016年6月29日,React 15.3引入了对React.PureComponent的支持。

倪风史
2023-03-14

React.PureComponent是在15.3.0版本之后添加的,因为在第一种情况下存在错误。如果你想让你的第一个案例起作用,请检查代码片段。我已经更新了react版本。

class App extends React.PureComponent {
  render() {
    console.log('re-render')
    return (
    <div>
     <span>I am parent</span>
     {this.props.children}
    </div>
    )
  }
}

  ReactDOM.render(
    <App>
      <div>
        I am the child
      </div>
    </App>,
    document.getElementById('app')
  )


//setTimeout(render, 1000)
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="app"></div>
昌勇锐
2023-03-14

我可能错了,但我不认为React.PureComponent存在于15.1.0版本中。

你得到的错误(未捕获的类型错误:超级表达式必须为空或函数,而不是未定义的)通常是由打字错误触发的,或者是由扩展不存在的类触发的(请参阅这篇SO文章中的更多细节)。

我的建议是让您的第三方LIB保持最新,并在这种情况下使用最新版本的React。

这是你自己的例子后,反应升级:

class App extends React.PureComponent {
 
  render() {
    console.log('re-render')
    return (
    <div>
     <span>I am parent</span>
     {this.props.children}
    </div>
    )
  }
}

  ReactDOM.render(
    <App>
      <div>
        I am the child
      </div>
    </App>,
    document.getElementById('app')
  )


//setTimeout(render, 1000)
html prettyprint-override"><script src="https://unpkg.com/react@16.2.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.2.0/umd/react-dom.development.js"></script>
<div id="app"></div>

 类似资料:
  • 问题内容: 官方阵营文档状态“ 的只有比较浅的对象”,并建议针对这一点,如果状态是‘深’。 鉴于此,在创建React组件时,为什么会有人偏爱它? 问题 : 我们可能会考虑使用对性能有什么影响? 我猜 的执行只有浅薄的比较。如果是这种情况,难道说的方法不能用于更深层次的比较吗? “此外,会跳过整个组件子树的属性更新”-这是否意味着属性更改会被忽略? 如果有帮助的话,阅读该媒体博客会引起疑问。 问题答

  • 官方的React文档声明“ 只执行粗浅的比较。如果是这样,难道不能用上述方法进行更深入的比较吗? “此外,的跳过整个组件子树的prop更新”-这是否意味着忽略prop更改? 在阅读这个媒体博客时出现了一个问题,如果它有帮助的话。

  • 我试图编写正确的查询,但它们显示的结果不正确。例如,我有表ABC: 在c栏中只能b_id 因为111在a_id10或11不是12我怎样才能找到它?我需要找到列C中发生(无效)值b_id的所有行,它们不在同一个a_id中。Sql(postgresql)不能正常工作,为什么?感谢任何帮助。 我的sql:

  • 我(目前)有三个按钮 使用这些按钮,我想显示不同的菜单/覆盖。覆盖图如下所示: 这方面的JS是: 我的问题是只有菜单1正在显示。脚本可以正常工作,但是menu2和menu3没有显示。 我想这一定是缺少的东西。也许是a$(this)什么的(对不起我的JS已经不是以前的样子了)。我在中循环,然后从google chrome dev中点击了“Right”按钮(我想,很难说出来)。 预期结果:如果我按下按

  • 好吧,一个奇怪的标题,但这是我的问题; 这是我显示数据的功能: 公共函数notLoggedIn($WhichTable,$WhichRow,$Link,$Preference,$DAG,$UUR){$this->NewFunction=新函数;$GetValue=$this->NewGet(); 这是为一个申请显示不同的时间表为学校的学生。此代码只显示一天。每天都有不同的排场。 但我希望所有行都显

  • 问题内容: 我在程序中发现了一些问题。 我使用log4j进行日志记录, 但是,在日志文件中,所有行号都变为“?”。 对话模式如下: 问题答案: 您很可能在已编译的工件中缺少调试信息。也就是说,这不是log4j的错,您需要确保正在编译包含调试信息的东西。一个快速的测试是尝试使用您喜欢的IDE调试您的应用程序。如果没有调试信息,它将抱怨并且不会建立调试会话。