Sınıf bileşeniyle varsayılan aksesuarlar
Kullanımı static defaultProps
doğ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, defaultProps
zamanla 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 foo
niteliği geçmeden oluşturulabilir ve derlenebilir :
<PageComponent bar={ "hello" } />
Bunu not et:
TypeScript 2.1 - 3.0 arası
TypeScript 3.0 defaultProps
sizin 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
defaultProps
ile 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
strictNullChecks
değeri this.props.foo
olacak possibly undefined
ve 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 Partial
tü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 defaultProps
yanı fonksiyon bileşenleri üzerinde, ancak sizin işlevi yazmak zorunda FunctionComponent
( StatelessComponent
içinde @types/react
versiyonundan önce 16.7.2
typescript biliyor ki) arayüzüne defaultProps
fonksiyonu ü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) props
parametrelerinizi 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 defaultProps
her 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 defaultProps
doğru. Bu kodu gönderebilir misiniz?