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

super()在没有任何参数的情况下做什么?

经嘉
2023-03-14

我正在从文档中学习反应,但不确定在这个例子中超级()做什么。通常,它不需要传递给创建新实例的参数,然后调用React吗?组件的构造函数方法将这些参数合并到实例中?没有任何争论它是做什么的?

class LikeButton extends React.Component {
  constructor() {
    super();
    this.state = {
      liked: false
    };
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick() {
    this.setState({liked: !this.state.liked});
  }
  render() {
    const text = this.state.liked ? 'liked' : 'haven\'t liked';
    return (
      <div onClick={this.handleClick}>
        You {text} this. Click to toggle.
      </div>
    );
  }
}

ReactDOM.render(
  <LikeButton />,
  document.getElementById('example')
);

共有2个答案

左丘昊天
2023-03-14

JavaScript中的super关键字用于调用父类的方法。本身,super()在构造函数中用于调用父构造函数。例如:

js prettyprint-override">class Animal {
  
  constructor(age) {
    console.log('Animal being made');
    this.age = age;
  }
  
  returnAge() {
    return this.age;
  }
  
}

class Dog extends Animal {

  constructor (age){
    super(age);
  }
  
  logAgeDog () {
    console.log(`This dog is: ${ super.returnAge()} years old`);
  }
  
}

const dog = new Dog(5);


console.log(dog);

dog.logAgeDog();
桓智敏
2023-03-14

在ES6中,如果派生类具有构造函数,则必须调用super()。在react中,所有组件都从组件类扩展而来。

实际上,并不需要为每个ES6/反应类都提供构造函数。如果没有定义自定义构造函数,它将使用默认构造函数。对于基类,它是:

constructor() {}

对于派生类,默认构造函数是:

constructor(...args) {
  super(...args);
}

在访问this之前,您还需要调用Super(),因为在调用Super()之前,this不会初始化。

在响应中使用自定义构造函数有几个原因。一个是您可以使用this.state=...来设置构造函数中的初始状态,而不是使用get初始状态生命周期方法。

还可以使用this.someClassMethod=this.someClassMethod.bind(this)绑定构造函数内的类方法。实际上最好在构造函数中绑定方法,因为它们只创建一次。否则,如果调用bind或使用箭头函数在构造函数之外的任何位置绑定方法(如render方法),它实际上会在每次渲染时创建函数的新实例。在这里阅读更多关于这方面的信息。

如果要在构造函数中使用this.props,需要以props作为参数调用Super

constructor(props) {
  super(props);
  this.state = {count: props.initialCount};
}

如果没有,则构造函数中未定义this.props。但是,您仍然可以访问类中构造函数之外的任何其他位置的this.props,而无需在构造函数中对其执行任何操作。

 类似资料:
  • 我正在上一门Java课程,我们还没有正式学习if语句。我在学习,看到了这个问题:

  • 问题内容: 我正在尝试编写一个执行脚本;但是,如果没有要提交的内容,则git会退出,状态为。部署脚本将其视为不成功,然后退出。我确实想检测 实际 要提交的故障,因此我不能仅仅给Fabric全面忽略故障。如何允许忽略空提交故障,以便部署可以继续进行,但仍然可以捕获实际提交失败时导致的错误? 问题答案: 通过检查git diff?的退出代码来预先捕获此条件。 例如(在shell中): 编辑:根据霍尔格

  • 不使用回溯方法是否可能实现DFS算法?如果是,那么请说明如何做到这一点。

  • 问题内容: 我需要在Linux / OSX终端下使用“干净的” shell(例如bash),而无需任何用户配置,但是每次启动时,它都会从某些文件(例如〜/ .bashrc)中读取配置信息。每当我需要“干净”的外壳时,我都可以修改该文件,并在完成后将其还原,但是有没有更简单的方法来执行此操作,例如命令? 问题答案: 您可以传递和命令行选项: 您可以在手册页中找到有关这些选项的文档。

  • 我正在使用Cucumber for BDD、JUnit和Selenium构建一个自动化框架,我们在云中有一个testrail实例用于测试管理,我实现了testrail API以从那里获取所有测试用例,问题是我无法运行这些步骤获取测试用例,因为总是验证第一个功能文件是否存在。 我尝试过结果总是一样的: 在[classpath:features] 0场景0步骤0m0.019s中找不到功能 这是启动该过

  • Tomcat每次部署花费大约20分钟,我发现它在部署阶段被卡住了,请参见下面的日志, 第一次启动会消耗大约2-7分钟,然后每次重启都会变得更糟。 环境: sudo apt-get install python-software sudo add-apt-repository ppa:webupd8team/java sudo apt-get更新