我正在从文档中学习反应,但不确定在这个例子中超级()做什么。通常,它不需要传递给创建新实例的参数,然后调用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')
);
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();
在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更新