📅  最后修改于: 2020-12-19 03:55:31             🧑  作者: Mango
构造函数是一种用于初始化类中对象状态的方法。在类中创建对象期间会自动调用它。
构造函数的概念在React中是相同的。在安装组件之前,会调用React组件中的构造函数。在为React组件实现构造函数时,需要在其他任何语句之前调用super(props)方法。如果不调用super(props)方法,则this.props将在构造函数中未定义,并可能导致错误。
Constructor(props){
super(props);
}
在React中,构造函数主要用于两个目的:
注意:如果您既没有为React组件初始化状态也没有绑定方法,则无需为React组件实现构造函数。
您不能直接在Constructor()中调用setState()方法。如果组件需要使用本地状态,则需要直接使用“ this.state ”在构造函数中分配初始状态。构造函数仅使用this.state分配初始状态,所有其他方法都需要使用set.state()方法。
构造函数的概念可以从下面的示例中理解。
App.js
import React, { Component } from 'react';
class App extends Component {
constructor(props){
super(props);
this.state = {
data: 'www.javatpoint.com'
}
this.handleEvent = this.handleEvent.bind(this);
}
handleEvent(){
console.log(this.props);
}
render() {
return (
React Constructor Example
);
}
}
export default App;
Main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render( , document.getElementById('app'));
输出量
执行上面的代码时,将得到以下输出。
与构造函数有关的最常见问题是:
1.每个组件中是否都必须有一个构造函数?
不,没有必要在每个组件中都有一个构造函数。如果组件不复杂,则仅返回一个节点。
class App extends Component {
render () {
return (
Name: { this.props.name }
);
}
}
2.是否有必要在构造函数中调用super()?
是的,有必要在构造函数中调用super()。如果需要设置属性或在组件的构造函数中访问“ this”,则需要调用super()。
class App extends Component {
constructor(props){
this.fName = "Jhon"; // 'this' is not allowed before super()
}
render () {
return (
Name: { this.props.name }
);
}
}
当您运行上述代码时,您会收到一条错误消息,指出在super()之前不允许'this' 。因此,如果需要访问构造函数内部的props,则需要调用super(props)。
箭头函数是ES6标准的新功能。如果需要使用箭头功能,则无需将任何事件绑定到“ this”。在这里,“ this”的范围是全局的,并且不限于任何调用函数。因此,如果您使用的是箭头功能,则无需在构造函数中绑定“ this”。
import React, { Component } from 'react';
class App extends Component {
constructor(props){
super(props);
this.state = {
data: 'www.javatpoint.com'
}
}
handleEvent = () => {
console.log(this.props);
}
render() {
return (
React Constructor Example
);
}
}
export default App;
我们可以通过以下方式使用构造函数:
1)构造函数用于初始化状态。
class App extends Component {
constructor(props){
// here, it is setting initial value for 'inputTextValue'
this.state = {
inputTextValue: 'initial value',
};
}
}
2)在构造函数中使用“ this”
class App extends Component {
constructor(props) {
// when you use 'this' in constructor, super() needs to be called first
super();
// it means, when you want to use 'this.props' in constructor, call it as below
super(props);
}
}
3)初始化第三方库
class App extends Component {
constructor(props) {
this.myBook = new MyBookLibrary();
//Here, you can access props without using 'this'
this.Book2 = new MyBookLibrary(props.environment);
}
}
4)当您需要在道具中将类方法传递给孩子时,绑定一些上下文(this)。
class App extends Component {
constructor(props) {
// when you need to 'bind' context to a function
this.handleFunction = this.handleFunction.bind(this);
}
}