Ang sangkap na Text sa React Native ay ang tanging paraan upang magpakita ng teksto sa screen, hindi tulad sa web kung saan ginagamit ang iba't ibang mga tag (p, span, h1-h6). Sinusuportahan ng Text ang nesting para sa cascading inheritance ng mga estilo, pagproseso ng mga touch event at awtomatikong pagputol ng linya. Ayon sa React Native Docs, 2024, ang Text ay ang pangalawang pinakamadalas na ginagamit na sangkap pagkatapos ng View. Ang sangkap ay nagre-render sa native na UILabel sa iOS at TextView sa Android, na tinitiyak ang tamang paggana ng mga font at accessibility.
Mga pangunahing punto
Text ay isang sangkap ng React Native para sa pagpapakita ng tekstuwal na nilalaman. Hindi tulad sa pag-develop ng web, kung saan maraming semantikong tag para sa teksto, sa React Native lahat ng elemento ng teksto ay ginagawa sa pamamagitan ng Text. Ang sangkap ay maaaring magpakita ng parehong simpleng teksto at kumplikadong mga istraktura na may nested Text at naka-istilong mga fragment.
Awtomatikong pinangangasiwaan ng Text ang pagputol ng linya, kinokontrol ang pamilya ng font, laki, kulay at pagkakahanay. Sinusuportahan ng sangkap ang mga touch event (onPress), na nagpapahintulot sa paggawa ng mga naki-click na link nang walang karagdagang mga wrapper. Isang mahalagang limitasyon: Ang Text ay hindi maaaring direktang ilagay sa View — sa iba pang mga sangkap na Text lamang o bilang direktang nilalaman.
Ayon sa React Native Nested Text, 2024, ang mga nested na sangkap na Text ay nagmamana ng mga estilo mula sa magulang. Ito ay nagpapahintulot sa pagtatakda ng base na estilo sa itaas na antas at pag-override ng mga indibidwal na katangian para sa mga tiyak na fragment — katulad ng paggana ng span gamit ang CSS sa web.
Ang sangkap na Text ay nagbibigay ng isang set ng mga props para sa pamamahala ng pagpapakita, pag-uugali at accessibility. Mga pangunahing kategorya: mga props ng estilo (font, laki, kulay, pagkakahanay), mga props ng pagpapakita (numberOfLines, lineBreakMode) at interaktibo (onPress, onLongPress).
numberOfLines ay naglilimita sa bilang ng mga linyang ipinapakita, nagdaragdag ng elipsis sa dulo. ellipsizeMode ay kumokontrol sa posisyon ng elipsis (head, middle, tail, clip). adjustsFontSizeToFit ay awtomatikong nagpapaliit ng laki ng font upang kasya ang teksto sa itinakdang hangganan. lineBreakMode ay tumutukoy kung paano putulin ang teksto na lampas sa numberOfLines.
Sinusuportahan ng Text ang onPress at onLongPress para sa pagproseso ng mga pagpindot. Ito ay nagpapahintulot sa paggawa ng mga tekstuwal na link nang hindi ginagamit ang TouchableOpacity. onTextLayout ay nagbabalik ng impormasyon tungkol sa posisyon ng teksto pagkatapos ng rendering — kapaki-pakinabang para sa mga animation at pagpoposisyon.
Sa iOS available ang disabled (nag-disable ng teksto), selectable (nagpapagana ng pagpili), dataDetectorTypes (awtomatikong pagkilala ng mga link, telepono, address). Sa Android available ang selectable (sa pamamagitan ng textSelectable), includeFontPadding (nag-aalis ng dagdag na espasyo).
Kahit na ang Text ay biswal na katulad ng mga HTML tag na p at span, ang mga pagkakaiba sa arkitektura ay makabuluhan. Sa React Native ay walang modelo ng DOM na may mga semantikong elemento ng teksto — lahat ng node ng teksto ay pinangangasiwaan sa pamamagitan ng iisang sangkap na Text na may iba't ibang props.
| Katangian | Text (React Native) | p / span (HTML) |
|---|---|---|
| Nesting | Text sa loob ng Text — pamana ng estilo | p ay hindi maaaring maglaman ng p; span sa loob ng p |
| margin default | Walang default na margin | p ay may margin-block-start/end |
| Pagputol ng linya | Awtomatiko sa loob ng lalagyan | p — block, span — inline |
| Suporta sa onPress | Built-in na suporta | Nangangailangan ng karagdagang wrapper |
| Pamana ng estilo | Oo, mula sa magulang na Text | Oo, kaskada ng CSS |
Ang pangunahing pagkakaiba — pamana ng mga estilo sa pamamagitan ng nesting ng Text. Kung ang panlabas na Text ay may fontSize: 18 at color: blue, lahat ng nested Text ay nagmamana ng mga estilong ito. Anumang prop ay maaaring i-override sa panloob na Text sa pamamagitan ng pagtatakda ng tiyak na halaga. Ito ay nakakatipid ng code at ginagawang mas malinis ang istraktura.
Sinusuportahan ng Text ang karamihan sa mga katangian ng CSS para sa tipograpiya: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform. Sa React Native, ang mga font ay ikinokonekta sa antas ng platform, hindi sa pamamagitan ng @font-face.
Upang gumamit ng mga custom na font, kailangan idagdag ang mga ito sa folder na assets/fonts at tukuyin sa react-native.config.js. Pagkatapos muling itayo ang app, ang font ay magiging available sa pamamagitan ng fontFamily. Hindi direktang sinusuportahan ng React Native ang mga web font (Google Fonts) — kinakailangan ang pag-download ng mga .ttf o .otf file.
Ang mekanismo ng pamana sa Text ay naiiba sa CSS. Ang mga estilo ay ipinapasa lamang mula sa Text patungo sa nested Text, ngunit hindi mula sa View patungo sa Text. Kung kailangan magtakda ng font para sa buong app, ginagamit ang defaultProps ng sangkap na Text o isang custom na sangkap na wrapper.
<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>
Sa halimbawang ito, ang panlabas na Text ay nagtatakda ng fontSize: 18 at color: #333. Ang panloob na Text ay nagmamana ng fontSize (18), ngunit ina-override ang fontWeight sa bold at color sa #007AFF. Ang panlabas na Text ay nagmamana lamang ng sarili nitong mga estilo. Ito ay eksaktong pagkakatulad ng paggana ng nested span sa HTML.
Tingnan natin ang dalawang tipikal na senaryo ng paggamit ng Text sa React Native: pag-format ng teksto gamit ang nesting at paggawa ng naki-click na sangkap na may limitasyon ng linya.
Sa halimbawang ito, ginagamit ang Text para sa pagpapakita ng multi-line na teksto na may naka-highlight na mga elemento: pamagat, petsa at nilalaman na may link.
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>
);
Sa estrukturang ito mayroong tatlong independiyenteng sangkap na Text (pamagat, petsa, nilalaman), bawat isa ay may kanya-kanyang estilo. Sa loob ng Text na may nilalaman ay may isa pang Text na may onPress para sa link. Ang pattern na ito ay ginagamit para sa mga news feed, blog at komento.
Para sa pagpapakita ng preview ng teksto na may elipsis, ginagamit ang numberOfLines. Ito ay isang karaniwang pattern para sa mga kard ng produkto at artikulo sa mga listahan.
<Text
numberOfLines={2}
ellipsizeMode="tail"
style={styles.preview}
>
{longDescription}
</Text>
Ang katangiang numberOfLines = 2 ay naglilimita ng teksto sa dalawang linya. Kung mas mahaba ang teksto, awtomatikong nagdaragdag ang React Native ng elipsis sa dulo ng ikalawang linya. Ang parameter na ellipsizeMode: 'tail' ay nagpapahiwatig na ang elipsis ay dapat nasa dulo (available din ang head, middle, clip).
Mga madalas itanong
Gumagamit ang React Native ng minimalist na set ng mga sangkap para sa cross-platform compatibility. Sa halip na maraming semantikong HTML tag, ginagamit ang isang Text na may iba't ibang estilo. Pinapasimple nito ang pag-render sa parehong platform mula sa isang codebase.
Oo, sinusuportahan ng Text ang onPress at onLongPress para sa pagproseso ng mga pagpindot. Gayunpaman, para sa mga buton na may visual na feedback (pag-highlight ng pagpindot) mas mainam na gamitin ang TouchableOpacity o Pressable na may Text sa loob. Ang Text.onPress ay hindi nagbibigay ng visual na indikasyon ng pagpindot bilang default.
Awtomatikong pumuputol ang Text ng mahahabang linya lamang sa loob ng lalagyan nito. Kung ang teksto ay hindi pumuputol, suriin: may limitasyon ba sa lapad ng magulang na View, hindi ba nakatakda ang nowrap sa mga estilo, at hindi ba lumalampas ang numberOfLines sa available na bilang ng mga linya.
Gumamit ng nested Text na may fontWeight: 'bold' o balutin ang teksto sa isang sangkap na may ganitong estilo. Maaari ring ilapat ang fontWeight: '700' o '800' para sa mas makapal na istilo. Ang kapal ay nakadepende sa availability ng kaukulang pamilya ng font sa device.
Hindi, ang Text ay maaari lamang maglaman ng iba pang mga sangkap na Text o mga string. Ang Image ay hindi maaaring maging anak ng Text. Para sa pagpapakita ng teksto na may mga icon, gumamit ng View na may Text at Image bilang katabing elemento o isang sangkap na sumusuporta sa pag-embed ng mga larawan.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din