由于我将代码重构为 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/