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

理解为什么在React类组件中不建议使用Super()

狄宜然
2023-03-14

我是React新手,我正在使用最新版本的React学习React组件生命周期。我对下面部分代码的“super”调用被标记为不推荐使用的警告。我很难理解这一点,因为很多文档仍然使用“super”,而且我不确定后续版本是什么,即使是从反馈中链接的完整文章中。有什么想法吗?谢谢

class App extends Component {
  constructor(props) {
    super(props);
  }
}

警告如下:

constructor React.Component<any, any, any>(props: any, context?: any): React:Component<any, any, any> (+1 overload)
@deprecated
@see - https://reactjs.org/docs/legacy-context.html
'(props: any, context?: any): Component<any, any, any>' is deprecated ts(6385)

共有3个答案

蔚丰
2023-03-14

可选的上下文参数似乎已被弃用,因为它引用了旧的React上下文(v16.3之前)。您使用的是什么版本的React?

https://reactjs.org/docs/legacy-context.html

我没有使用React with TypeScript。也许反应映射已经过时了。

尉迟晔
2023-03-14

super(道具) 尚未被弃用。该弃用消息实际上是由React的类型定义文件中的错误引起的,并已在@types/React 16.9.51中修复。只要升级软件包,您就可以开始了:

npm install @types/react

严欣怡
2023-03-14

只有在构造函数中使用this.props时,才需要Super(props);。否则,您可以使用Super();如果您在构造函数中使用Super();,那么在构造函数之外调用this.props不是问题。您可以在以下链接中阅读:https://overreacted.io/why-do-we-write-super-props/

class Button extends React.Component {
  constructor(props) {
    super(); //we forgot to pass props
    console.log(props); //{}
    console.log(this.props); //undefined
  }
  // ...
}

如果这种情况发生在从构造函数调用的某个方法中,则可能更具挑战性。这就是为什么我建议总是传递super(道具),即使它不是必需的。

class Button extends React.Component {
  constructor(props) {
    super(props); //we passed props
    console.log(props); //{}
    console.log(this.props); //{}
  }
  // ...
}
 类似资料:
  • 问题内容: 我最近一直在使用Hibernate 3.5和Spring 3进行一些工作,但是我对Hibernate还是比较陌生,并认为Spring中的类使将Hibernate与我的域类一起使用变得容易且容易。 但是,在搜索一个不相关的问题时,我看到有人提到,这不是使用Spring和Hibernate的最佳方法。任何人都可以阐明以下几点: 为什么不推荐? 整合Hibernate和Spring的最佳方法

  • 本文向大家介绍在css中为什么说不建议使用@import?相关面试题,主要包含被问及在css中为什么说不建议使用@import?时的应答技巧和注意事项,需要的朋友参考一下 @import 属于 CSS,所以导入语句应写在 CSS 中,要注意的是导入语句应写在样式表的开头,否则无法正确导入外部文件; @import 是 CSS2.1 才出现的概念,所以如果浏览器版本较低,无法正确导入外部样式文件;

  • 问题内容: Java文档似乎并未提及有关的弃用的任何内容,但我一直很早就听说过它的弃用情况。是因为它具有错误/错误而被弃用,还是整体上更好使用? 我有一些使用的代码,我想知道我是否应该认真考虑将其重构为使用,还是弃用纯粹是为了方便而我的代码是安全的。 问题答案: 从javadoc中获取StringTokenizer: 是旧类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人改

  • 问题内容: 我找不到任何解释为什么Apache Lang3 v3.7中不推荐使用StringEscapeUtils。 https://commons.apache.org/proper/commons- lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html 我们现在应该使用什么来进行HTML转义/转义 问题答案: 班级已从包裹中移

  • 问题内容: 为什么不推荐使用? 问题答案: 在javadoc中说为什么。被设计为低负载并发的一种简单解决方案,但它甚至无法解决: 请注意,SingleThreadModel不能解决所有线程安全问题。例如,即使使用SingleThreadModel servlet,会话属性和静态变量仍然可以同时由多个线程上的多个请求访问。建议开发人员采取其他方法解决这些问题,而不要实现此接口,例如,避免使用实例变量

  • 问题内容: 我从没想过,只有我使用了返回一个字符数组的方法,并且看到该方法已被 弃用 。但是现在我想,为什么 不赞成使用 此方法? Java文档说明: 不推荐使用 。 从Java 2 Platform v1.2开始,由取代。 获取由组件表示的文本的一部分。如果length为0,则返回一个空字符串。 出于安全原因,不建议使用此方法。请改用该方法。 但是那些 安全原因是 什么?有什么想法吗? 先感谢您