为什么我的 React 类没有调用 getInitialState?

IT技术 javascript reactjs
2021-05-21 10:24:34

我在 Babel 中使用 ES6 类。我有一个如下所示的 React 组件:

import { Component } from 'react';

export default class MyReactComponent extends Component {
  getInitialState() {
    return {
      foo: true,
      bar: 'no'
    };
  }

  render() {
    return (
      <div className="theFoo">
        <span>{this.state.bar}</span>
      </div>
    );
  }
}

它看起来并不像getInitialState被调用,因为我得到这个错误:Cannot read property 'bar' of null

3个回答

开发人员在v0.13.0发行说明中讨论了 ES6 类支持如果您使用扩展的 ES6 类React.Component,那么您应该使用 aconstructor()而不是getInitialState

除了 getInitialState 之外,该 API 主要是您所期望的。我们认为指定类状态的惯用方法是只使用一个简单的实例属性。同样, getDefaultProps 和 propTypes 实际上只是构造函数上的属性。

伴随内森回答的代码:

import { Component } from 'react';

export default class MyReactComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      foo: true,
      bar: 'no'
    };
  }

  render() {
    return (
      <div className="theFoo">
        <span>{this.state.bar}</span>
      </div>
    );
  }
}

稍微扩展一下它的含义

getDefaultProps 和 propTypes 实际上只是构造函数上的属性。

“在构造函数上”位是奇怪的措辞。在普通的 OOP 语言中,它只是意味着它们是“静态类变量”

class MyClass extends React.Component {
    static defaultProps = { yada: "yada" }
    ...
}

或者

MyClass.defaultProps = { yada: "yada" }

您还可以在类中引用它们,例如:

constructor(props) {
    this.state = MyClass.defaultProps;
}

或者任何你声明为静态类变量的东西。我不知道为什么网上的任何地方都没有谈论ES6 类:?

请参阅文档