Sınıf bileşeniyle varsayılan aksesuarlar
Kullanımı static defaultPropsdoğrudur. Ayrıca sahne ve durum için sınıfları değil arabirimleri kullanıyor olmalısınız.
2018/12/1 Güncellemesi : TypeScript, defaultPropszamanla ilişkili tür kontrolünü geliştirdi . Eski kullanımlara ve sorunlara kadar en son ve en iyi kullanım için okumaya devam edin.
TypeScript 3.0 ve üstü için
TypeScript , tür denetlemenin beklediğiniz gibi çalışmasını sağlamak içindefaultProps özel olarak destek ekledi . Misal:
interface PageProps {
foo: string;
bar: string;
}
export class PageComponent extends React.Component<PageProps, {}> {
public static defaultProps = {
foo: "default"
};
public render(): JSX.Element {
return (
<span>Hello, { this.props.foo.toUpperCase() }</span>
);
}
}
Bir fooniteliği geçmeden oluşturulabilir ve derlenebilir :
<PageComponent bar={ "hello" } />
Bunu not et:
TypeScript 2.1 - 3.0 arası
TypeScript 3.0 defaultPropssizin için derleyici desteğini uygulamadan önce yine de yararlanabiliyordu ve çalışma zamanında React ile% 100 çalıştı, ancak TypeScript yalnızca varsayılan olarak JSX özelliklerini denetlerken sahne donanımlarını isteğe bağlı olarak işaretlemeniz gerektiğinden ?. Misal:
interface PageProps {
foo?: string;
bar: number;
}
export class PageComponent extends React.Component<PageProps, {}> {
public static defaultProps: Partial<PageProps> = {
foo: "default"
};
public render(): JSX.Element {
return (
<span>Hello, world</span>
);
}
}
Bunu not et:
- Bu açıklama yaparak iyi bir fikirdir
defaultPropsile Partial<>sizin sahne karşı bu yüzden o tip-çekler, ancak gerekli özellikleri bir varsayılan gerekli olmaması gereken beri hiç mantıklı bir varsayılan değer olan her Gerekli özelliğini temin gerekmez.
- Kullanırken
strictNullChecksdeğeri this.props.fooolacak possibly undefinedve geçersiz olmayan bir iddiayı (yani this.props.foo!) veya tip koruyucuyu (yani if (this.props.foo) ...) kaldırmak gerekir undefined. Varsayılan pervane değeri, aslında asla tanımlanmayacağı anlamına gelir, ancak TS bu akışı anlamadı. TS 3.0'ın açık destek vermesinin ana nedenlerinden biri budur defaultProps.
TypeScript 2.1'den önce
Bu aynı şekilde çalışır, ancak Partialtürleriniz yoktur, bu nedenle Partial<>tüm gerekli sahne için varsayılan değerleri atlayın ve sağlayın (bu varsayılanlar asla kullanılmayacak olsa bile) veya açık tür ek açıklamasını tamamen atlayın.
Sen kullanabilirsiniz defaultPropsyanı fonksiyon bileşenleri üzerinde, ancak sizin işlevi yazmak zorunda FunctionComponent( StatelessComponentiçinde @types/reactversiyonundan önce 16.7.2typescript biliyor ki) arayüzüne defaultPropsfonksiyonu üzerine:
interface PageProps {
foo?: string;
bar: number;
}
const PageComponent: FunctionComponent<PageProps> = (props) => {
return (
<span>Hello, {props.foo}, {props.bar}</span>
);
};
PageComponent.defaultProps = {
foo: "default"
};
TS 2.1+ sürümünde kısmi olarak belirtilmiş Partial<PageProps>olduğundan hiçbir yerde kullanmanız gerekmediğini unutmayın FunctionComponent.defaultProps.
Başka bir güzel alternatif (kullandığım şey) propsparametrelerinizi yıkmak ve doğrudan varsayılan değerleri atamaktır:
const PageComponent: FunctionComponent<PageProps> = ({foo = "default", bar}) => {
return (
<span>Hello, {foo}, {bar}</span>
);
};
O zaman hiç ihtiyacınız yok defaultProps! Eğer varsa unutmayın do sağlamak defaultPropsher zaman açıkça geçecek tepki çünkü bir işlev bileşende varsayılan parametre değerlerinin her zaman öncelikli olacaktır defaultProps(parametreler tanımsız asla böylece, böylece varsayılan parametre hiçbir zaman kullanılmaz.) Kullanmak istiyorum Yani değerlerini biri ya da diğeri, ikisi de değil.
static defaultPropsdoğru. Bu kodu gönderebilir misiniz?