ES7'deki ES7 sınıflarındaki statik özelliklerini geçersiz kıl/genişlet, ESözelliği ve yöntem tanımları kavramını tanıtır. Bir ES7 özellikli transpiler ile birlikte, bu can be used in React şöyle, props
için doğrulayıcılarını ve varsayılan belirtmek için:React.js
export default class ComponentOne extends React.Component {
static propTypes = {
foo: React.PropTypes.string
}
static defaultProps = {
foo: 'bar'
}
// ...
}
Bu süper kullanışlı olmakla alt sınıflar da eklenince zor alır. Örneğin, aşağıdaki modül yukarıdaki ComponentOne
aynı kod tabanına eklenir ki:
export default class ComponentTwo extends ComponentOne {
static propTypes = {
baz: React.PropTypes.number
}
static defaultProps = {
baz: 42
}
// ...
}
ben onun süper, ComponentOne
mülkiyet doğrulayıcılarını ve varsayılan "miras" için ComponentTwo
istiyorum. Bunun yerine, ve adresindeki defaultProps
, ComponentOne
numaralı belgede bulunanları gölgeleyin ve React, ComponentOne
'da tanımlananları dışarı fırlatır. super
yana
akım sınıfının prototip için bir referans ve static
değerleri prototip kapalı doğrudan asılı başvurmak gerekiyordu, ben bu işe düşündüm:
import _ from 'lodash';
export default class ComponentTwo extends ComponentOne {
static propTypes = _.merge(super.propTypes, {
baz: React.PropTypes.number
});
}
Ancak bundan muhtemelen bir hata oluşturur Babil: Parsing error: 'super' outside of function or class
.
Bu çalışır, ancak çok taşınabilir:
export default class ComponentTwo extends ComponentOne {
static propTypes = Object.assign({
baz: React.PropTypes.number
}, ComponentOne.propTypes);
}
reusably/daha temiz bunu yapmak için başka yolları var mı?
uyarılar dikkat ediniz Desteklenen ancak daha eski tarayıcılarda sorun yaşayabilirsiniz.NOT: '__proto__' IE'de desteklenmiyor <= 10, böylece statik özellikler devralınmayacak." kaynak: https://babeljs.io/docs/advanced/caveats/ – Raspo
Kurucuda 'super.propTypes' birleştirmeyi denediniz mi? –
@Mat Henüz yapmadım, ama "props" 'un zaten ayarlanmış olan varsayılan ayarlara gelmesiyle, bunun çok geç olacağını hayal ediyorum. – ericsoco