Komponenta Text v React Native je jediný způsob zobrazení textu na obrazovce, na rozdíl od webu, kde se používají různé tagy (p, span, h1-h6). Text podporuje vnořování pro kaskádové dědění stylů, zpracování dotykových událostí a automatické zalamování řádků. Podle React Native Docs, 2024 je Text druhou nejpoužívanější komponentou po View. Komponenta se renderuje do nativního UILabel na iOS a TextView na Androidu, což zajišťuje správnou funkci písem a přístupnosti.
Hlavní body
Text je komponenta React Native pro zobrazení textového obsahu. Na rozdíl od vývoje pro web, kde existuje mnoho sémantických tagů pro text, v React Native jsou všechny textové prvky vytvářeny pomocí Text. Komponenta může zobrazit jak prostý text, tak složité struktury s vnořenými Text a stylizovanými fragmenty.
Text automaticky zpracovává zalamování řádků, řídí rodinu písma, velikost, barvu a zarovnání. Komponenta podporuje dotykové události (onPress), což umožňuje vytvářet klikatelné odkazy bez dalších obalů. Důležité omezení: Text nelze vložit přímo do View — pouze do jiných Text komponent nebo jako přímý obsah.
Podle React Native Nested Text, 2024 vnořené Text komponenty dědí styly od rodiče. To umožňuje nastavit základní styl na horní úrovni a přepsat jednotlivé vlastnosti pro konkrétní fragmenty — obdobně jako funguje span s CSS na webu.
Komponenta Text poskytuje sadu props pro správu zobrazení, chování a přístupnosti. Klíčové kategorie: stylové props (písmo, velikost, barva, zarovnání), props zobrazení (numberOfLines, lineBreakMode) a interaktivní (onPress, onLongPress).
numberOfLines omezuje počet zobrazených řádků a na konci přidává tři tečky. ellipsizeMode řídí polohu tří teček (head, middle, tail, clip). adjustsFontSizeToFit automaticky zmenšuje velikost písma, aby se text vešel do daných hranic. lineBreakMode určuje, jak oříznout text přesahující numberOfLines.
Text podporuje onPress a onLongPress pro zpracování dotyků. To umožňuje vytvářet textové odkazy bez použití TouchableOpacity. onTextLayout vrací informace o umístění textu po renderování — užitečné pro animace a pozicování.
Na iOS je k dispozici disabled (vypne text), selectable (zapne výběr), dataDetectorTypes (automatické rozpoznávání odkazů, telefonů, adres). Na Androidu je k dispozici selectable (přes textSelectable), includeFontPadding (odstraní nadbytečné mezery).
Ačkoli Text vizuálně připomíná HTML tagy p a span, architektonické rozdíly jsou podstatné. V React Native chybí model DOM se sémantickými textovými prvky — všechny textové uzly jsou zpracovávány prostřednictvím jediné komponenty Text s různými props.
| Vlastnost | Text (React Native) | p / span (HTML) |
|---|---|---|
| Vnořování | Text v Text — dědění stylů | p nemůže obsahovat p; span v p |
| Výchozí margin | Žádné výchozí okraje | p má margin-block-start/end |
| Zalamování řádků | Automatické uvnitř kontejneru | p — blokový, span — řádkový |
| Podpora onPress | Vestavěná podpora | Vyžaduje dodatečný obal |
| Dědění stylů | Ano, od nadřazeného Text | Ano, kaskáda CSS |
Klíčový rozdíl — dědění stylů prostřednictvím vnořování Text. Pokud má vnější Text fontSize: 18 a color: blue, všechny vnořené Text tyto styly dědí. Libovolnou props lze ve vnitřním Text přepsat nastavením konkrétní hodnoty. To šetří kód a činí strukturu čistší.
Text podporuje většinu vlastností CSS pro typografii: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform. V React Native se písma připojují na úrovni platformy, nikoli přes @font-face.
Pro použití vlastních písem je třeba je přidat do složky assets/fonts a uvést v react-native.config.js. Po přestavění aplikace je písmo dostupné přes fontFamily. React Native nepodporuje přímo webová písma (Google Fonts) — je vyžadováno stažení souborů .ttf nebo .otf.
Mechanismus dědění v Text se liší od CSS. Styly se předávají pouze z Text do vnořeného Text, ale ne z View do Text. Pokud je třeba nastavit písmo pro celou aplikaci, použije se defaultProps komponenty Text nebo vlastní obalová komponenta.
<Text style={{ fontSize: 18, color: '#333' }}>
This text is 18px and color #333
<Text style={{ fontWeight: 'bold', color: '#007AFF' }}>
bold and blue
</Text>
back to #333 color
</Text>
V tomto příkladu vnější Text nastaví fontSize: 18 a color: #333. Vnitřní Text dědí fontSize (18), ale přepíše fontWeight na bold a color na #007AFF. Vnější Text dědí pouze své vlastní styly. Toto je přesná analogie fungování vnořených span v HTML.
Podívejme se na dva typické scénáře použití Text v React Native: formátování textu s vnořováním a vytvoření klikatelné komponenty s omezením řádků.
V tomto příkladu je Text použit k zobrazení víceřádkového textu se zvýrazněnými prvky: nadpis, datum a obsah s odkazem.
const NewsCard = ({ title, date, content }) => (
<View style={styles.card}>
<Text style={styles.title}>{title}</Text>
<Text style={styles.date}>{date}</Text>
<Text style={styles.content}>
{content}
{' ' }
<Text
style={styles.link}
onPress={() => Linking.openURL(url)}
>
Read more
</Text>
</Text>
</View>
);
V této struktuře jsou tři nezávislé Text komponenty (nadpis, datum, obsah), každá s vlastním stylem. Uvnitř Text s obsahem je vnořen další Text s onPress pro odkaz. Tento vzor se používá pro zpravodajské kanály, blogy a komentáře.
Pro zobrazení náhledu textu se třemi tečkami se používá numberOfLines. Toto je standardní vzor pro karty produktů a články v seznamech.
<Text
numberOfLines={2}
ellipsizeMode="tail"
style={styles.preview}
>
{longDescription}
</Text>
Vlastnost numberOfLines = 2 omezuje text na dva řádky. Pokud je text delší, React Native automaticky přidá tři tečky na konec druhého řádku. Parametr ellipsizeMode: 'tail' určuje, že tři tečky mají být na konci (k dispozici jsou také head, middle, clip).
Často kladené otázky
React Native používá minimalistickou sadu komponent pro multiplatformní kompatibilitu. Místo mnoha sémantických HTML tagů se používá jeden Text s různými styly. To zjednodušuje renderování na obou platformách z jedné kódové základny.
Ano, Text podporuje onPress a onLongPress pro zpracování dotyků. Pro tlačítka s vizuální zpětnou vazbou (zvýraznění stisku) je však lepší použít TouchableOpacity nebo Pressable s Text uvnitř. Text.onPress neposkytuje vizuální indikaci stisku ve výchozím nastavení.
Text automaticky zalomí pouze dlouhé řádky uvnitř svého kontejneru. Pokud se text nezalamuje, zkontrolujte: zda nadřazené View nemá omezení šířky, zda není ve stylech nastaveno nowrap a zda numberOfLines nepřekračuje dostupný počet řádků.
Použijte vnořený Text s fontWeight: 'bold' nebo zabalte text do komponenty s tímto stylem. Lze také použít fontWeight: '700' nebo '800' pro tučnější řez. Tloušťka závisí na dostupnosti odpovídajícího písma na zařízení.
Ne, Text může obsahovat pouze jiné Text komponenty nebo řetězce. Image nemůže být potomkem Text. Pro zobrazení textu s ikonami použijte View s Text a Image jako sousední prvky nebo komponentu podporující vkládání obrázků.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také