由于我将代码重构为 ES6,我将所有默认值都移到 SomeClass.defaultProps = { ... }

假设一种情况,当有一个类层次结构时,我需要为整个层次结构保留一些默认值。但是 问题 defaultProps 不适用于扩展的类:

class AbstractComponent extends React.Component {
  constructor(props) { super(props) }
}
class OneOfImplementations extends AbstractComponent {
  constructor(props) { super(props) }
}
//Problem: hierarchy defaults doesn't work
AbstractComponent.defaultProps = { name: 'Super' }

Fiddle example

P.S. 我想知道为整个层次结构保留公共(public)(变量/函数)的最佳位置在哪里?也许在 AbstractComponent 做这样的事情:
constructor(props) {
  super(_.assign(props, {
    commonValue: 128,
    commonCallback: _.noop
  }));
}

但问题是无法覆盖子类的属性之一

最佳答案

或者,如果您在 Babel 中使用 stage: 0 stage: 2 预设(或直接使用 transform),您可以使用 es7 建议的静态属性:

class AbstractComponent extends React.PureComponent {

  static defaultProps = { name: 'Super' }

  // Bonus: you can also set instance properties like this
  state = {
    someState: true,
  }

  // ^ Combined with new arrow binding syntax, you often don't need
  // to override the constructor (for state or .bind(this) reasons)
  onKeyPress = () => {
    // ...
  }
}

关于javascript - react + ES6 : defaultProps of hierarchy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33433153/

10-11 12:35