React Components的构造函数是否需要props参数?

时间:2018-01-16 04:24:13

标签: reactjs

我是否应该在构造函数中包含props参数,如果我根本没有使用道具,则调用super?

例如,如果我写:

class NotePage extends React.Component<void, State> {
    constructor(){
        super();
        this.state = {
            filterStr: "string"
        };
    }
    ...
}

这会导致任何问题吗?

我问,因为如果我包含道具,那么流程会抱怨缺少注释,解决问题的一种方法是删除props参数。

2 个答案:

答案 0 :(得分:4)

首先,当你没有在组件的初始化中访问道具时,根本不需要构造函数。你可以这样写你的状态:

class NotePage extends React.Component<void, State> {
   state = {
      filterStr: "string"
   }
    ...
}

只有在使用道具进行初始化时才需要,使用构造函数并以这种方式调用:

class NotePage extends React.Component<void, State> {
    constructor(props){
        super(props);
        this.state = {
            filterStr: "string"
        };
    }
    ...
}

希望这会有所帮助!!

我找到了由@dan Abramov(反应核心团队)撰写的精彩链接。这也可能有助于人们理解超级(道具)。 Link

答案 1 :(得分:3)

来自官方文档React Constructor

  

你应该在任何其他声明之前调用super(props)。否则,this.props将在构造函数中未定义,这可能导致错误

constructor(props) {

  // no super call
}

如果不调用它,则从父组件作为属性传递的数据在子组件的props构造函数中不可用。但是,道具仍然可以在组件的其余部分中使用,例如渲染功能。

e.g。

class Parent extends React.Component{

    render(){

        return (<Child  mydata = {'some data here'}/>)
    }
}

class Child extends React.Component{

   constructor(){
    super(); //no props
    this.props.mydata //will be undefined
   }

  render(){
    this.props.mydata //defined
  }
}