我是否应该在构造函数中包含props参数,如果我根本没有使用道具,则调用super?
例如,如果我写:
class NotePage extends React.Component<void, State> {
constructor(){
super();
this.state = {
filterStr: "string"
};
}
...
}
这会导致任何问题吗?
我问,因为如果我包含道具,那么流程会抱怨缺少注释,解决问题的一种方法是删除props参数。
答案 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
}
}