声明默认道具和 PropTypes

我们如何使用和声明默认道具及其类型有重大变化。

React.createClass

在这个版本中,propTypes 属性是一个 Object,我们可以在其中声明每个 prop 的类型。getDefaultProps 属性是一个返回 Object 以创建初始道具的函数。

import React from 'react';

const MyComponent = React.createClass({
  propTypes: {
    name: React.PropTypes.string,
    position: React.PropTypes.number
  },
  getDefaultProps() {
    return {
      name: 'Home',
      position: 1
    };
  },
  render() {
    return (
      <div></div>
    );
  }
});

export default MyComponent;

React.Component

此版本使用 propTypes 作为实际 MyComponent 类的属性,而不是属性作为 createClass 定义对象的一部分。

getDefaultProps 现在已经改变为类名为 defaultProps 的 Object 属性,因为它不再是 get 函数,它只是一个 Object。它避免了更多的 React 样板,这只是简单的 JavaScript。

import React from 'react';

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return (
      <div></div>
    );
  }
}
MyComponent.propTypes = {
  name: React.PropTypes.string,
  position: React.PropTypes.number
};
MyComponent.defaultProps = {
  name: 'Home',
  position: 1
};

export default MyComponent;

另外,propTypesdefaultProps 还有另一种语法。如果你的构建已启用 ES7 属性初始值设定项,则这是一个快捷方式:

import React from 'react';

class MyComponent extends React.Component {
  static propTypes = {
    name: React.PropTypes.string,
    position: React.PropTypes.number
  };
  static defaultProps = {
    name: 'Home',
    position: 1
  };
  constructor(props) {
    super(props);
  }
  render() {
    return (
      <div></div>
    );
  }
}

export default MyComponent;