React docs说我们不应该在不使用this.state
的情况下改变this.setState
。
然而,使用init状态var来重置表单和其他类似情况是有效的。
1据我所知,我的实施方案符合有关状态变异的反应文档,我是否正确?
export default class SomeComp extends Component {
initState = {
demo: true,
company: '',
name: '',
email: '',
options: ''
}
state = {...this.initState }
...
[2]我明白我们应该只使用super,如果我们必须在我们类的构造函数中调用它。如下所示:
export default class SomeComp extends Component {
constructor() {
super(props, state)
this.props... //do something
this.state... //do some more
}
...
我是否正确,您能否在构造函数中提供一个常见的真实世界用例?
答案 0 :(得分:1)
official docs以下点:
React.Component
子类的构造函数时,应在任何其他语句之前调用super(props)
。否则,this.props
中的undefined
将为constructor
,这可能会导致错误。componentDidMount()
代替this.state
;不要尝试从构造函数中调用setState()
。构造函数通常也用于将事件处理程序绑定到类实例。要发生的事情:
this.props... //do something
无效,因为你无法改变道具。super
应该被称为super(props)
。你不能通过国家而你也不需要。
class SomeComp1 extends React.Component {
state = {
demo: true,
company: 'example',
name: '',
email: '',
options: ''
};
render() {
return <div>company1: {this.state.company} </div>;
}
}
class SomeComp2 extends React.Component {
constructor(props) {
super(props);
this.state = {
demo: true,
company: 'example',
name: '',
email: '',
options: ''
};
}
render() {
return <div>company2: {this.state.company} </div>;
}
}
ReactDOM.render(
<div>
<SomeComp1 />
<SomeComp2 />
</div>,
document.getElementById('root')
);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"/>
&#13;