在React中从超类继承defaultProps

ᆼᆺᆼ*_*ᆼᆺᆼ 3 inheritance ecmascript-6 reactjs

我认为一些props(例如,一个主题)在组件中是如此普遍,以至于提取它们的处理(对于超类)是有意义的.然后它的默认值也属于那里.

但是,在React实现这一目标的唯一方法是什么?

class Base extends React.Component {
  bgColor() {
    switch (this.props.theme) {
      case 'Summer': return 'yellow'; break;
      case 'Autumn': return 'grey'; break;
      case 'Winter': return 'white'; break;
    }
  }
}
Base.defaultProps = {
  theme: 'autumn'
};
Run Code Online (Sandbox Code Playgroud)
class Sky extends Base {
  render() {
    return <div style={{backgroundColor: this.bgColor()}}>{this.props.clouds}</div>;
  }
}
Sky.defaultProps = {
  clouds: []
};
Run Code Online (Sandbox Code Playgroud)

... defaultProps是一个属性(与实例相对),并且没有继承.

log*_*yth 7

通过指定Sky.defaultProps隐藏基本的.如果你想组合它们,你需要明确地做到这一点,例如

Sky.defaultProps = Object.assign({}, Base.defaultProps, {
  clouds: []
});
Run Code Online (Sandbox Code Playgroud)