Компонента Text у React Native је једини начин за приказ текста на екрану, за разлику од веба, где се користе различити тагови (p, span, h1-h6). Text подржава угњежђавање за каскадно насљеђивање стилова, обраду догађаја додира и аутоматски прелом редова. Према React Native Docs, 2024, Text је друга најчешће коришћена компонента након View. Компонента се рендерује у изворни UILabel на iOS и TextView на Android-у, обезбјеђујући исправан рад фонтова и приступачности.
Главне тачке
Text је React Native компонента за приказ текстуалног садржаја. За разлику од веб развоја, гдје постоји мноштво семантичких тагова за текст, у React Native-у се сви текстуални елементи креирају путем Text-а. Компонента може приказати како обичан текст, тако и сложене структуре са угњежђеним Text и стилизованим фрагментима.
Text аутоматски обрађује прелом редова, управља гарнитуром, величином, бојом и поравнањем. Компонента подржава догађаје додира (onPress), што омогућава стварање кликабилних линкова без додатних омотача. Важно ограничење: Text се не може угњеждити директно у View — само у друге Text компоненте или као директан садржај.
Према React Native Nested Text, 2024, угњежђене Text компоненте насљеђују стилове од родитеља. Ово омогућава постављање основног стила на горњем нивоу и преиначавање појединачних својстава за одређене фрагменте — слично раду span-а са CSS-ом у вебу.
Компонента Text нуди скуп prop-сова за управљање приказом, понашањем и приступачношћу. Кључне категорије: стилски prop-сови (фонт, величина, боја, поравнање), prop-сови приказа (numberOfLines, lineBreakMode) и интерактивни (onPress, onLongPress).
numberOfLines ограничава број приказаних редова, додајући три тачке на крају. ellipsizeMode управља положајем три тачке (head, middle, tail, clip). adjustsFontSizeToFit аутоматски смањује величину фонта како би текст стао у задате оквире. lineBreakMode одређује како скратити текст изван numberOfLines.
Text подржава onPress и onLongPress за обраду додира. Ово омогућава прављење текст линкова без коришћења TouchableOpacity. onTextLayout враћа информације о положају текста након рендеровања — корисно за анимације и позиционирање.
На iOS-у су доступни disabled (искључује текст), selectable (укључује селекцију), dataDetectorTypes (аутоматско препознавање линкова, телефона, адреса). На Android-у су доступни selectable (путем textSelectable), includeFontPadding (уклања додатне размаке).
Иако је Text визуелно сличан HTML таговима p и span, архитектуралне разлике су значајне. У React Native-у недостаје DOM модел са семантичким текстуалним елементима — сви текстуални чворови се обрађују кроз јединствену Text компоненту са различитим prop-совима.
| Карактеристика | Text (React Native) | p / span (HTML) |
|---|---|---|
| Угњежђавање | Text у Text — насљеђивање стилова | p не може садржати p; span у p |
| margin подразумијевано | Нема размака подразумијевано | p има margin-block-start/end |
| Прелом редова | Аутоматски унутар контејнера | p — блоковни, span — линијски |
| Подршка за onPress | Уграђена подршка | Захтијева додатни омотач |
| Насљеђивање стилова | Да, од родитељског Text-а | Да, каскада CSS-а |
Кључна разлика — насљеђивање стилова кроз угњежђавање Text-а. Ако спољашњи Text има fontSize: 18 и color: blue, сви угњежђени Text-ови насљеђују ове стилове. Било који prop се може преиначити у унутрашњем Text-у задавањем конкретне вриједности. Ово штеди код и чини структуру чистијом.
Text подржава већину CSS својстава за типографију: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform. У React Native-у фонтови се повезују на нивоу платформе, а не путем @font-face.
За коришћење прилагођених фонтова потребно их је додати у фасциклу assets/fonts и навести у react-native.config.js. Након поновне изградње апликације, фонт постаје доступан путем fontFamily. React Native не подржава веб-фонтове (Google Fonts) директно — потребно је преузимање .ttf или .otf датотека.
Механизам насљеђивања у Text-у се разликује од CSS-а. Стилови се преносе само са Text-а на угњежђени Text, али не са View-а на Text. Ако је потребно поставити фонт за цијелу апликацију, користи се defaultProps компоненте Text или прилагођена компонента-омотач.
<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>
У овом примјеру спољашњи Text поставља fontSize: 18 и color: #333. Унутрашњи Text насљеђује fontSize (18), али преиначава fontWeight на bold и color на #007AFF. Спољашњи Text насљеђује само своје стилове. Ово је тачна аналогија рада угњежђених span-ова у HTML-у.
Размотримо два типична сценарија коришћења Text у React Native-у: форматирање текста са угњежђавањем и стварање кликабилне компоненте са ограничењем редова.
У овом примјеру Text се користи за приказ вишередног текста са истакнутим елементима: наслов, датум и садржај са линком.
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>
);
У овој структури постоје три независне Text компоненте (наслов, датум, садржај), свака са својим стилом. Унутар Text-а са садржајем угњежђен је још један Text са onPress за линк. Овај образац се користи за вијести феедове, блогове и коментаре.
За приказ прегледа текста са три тачке користи се numberOfLines. Ово је стандардни образац за картице производа и чланака на листама.
<Text
numberOfLines={2}
ellipsizeMode="tail"
style={styles.preview}
>
{longDescription}
</Text>
Својство numberOfLines = 2 ограничава текст на два реда. Ако је текст дужи, React Native аутоматски додаје три тачке на крају другог реда. Параметар ellipsizeMode: 'tail' указује да три тачке треба да буду на крају (доступни су и head, middle, clip).
Често постављана питања
React Native користи минималистички скуп компоненти за међуплатформску компатибилност. Умјесто више семантичких HTML тагова примјењује се један Text са различитим стиловима. Ово поједностављује рендеровање на обије платформе из једне базе кода.
Да, Text подржава onPress и onLongPress за обраду додира. Међутим, за дугмад са визуелном повратном информацијом (освјетљење притиска) боље је користити TouchableOpacity или Pressable са Text-ом унутра. Text.onPress не пружа визуелну индикацију притиска подразумијевано.
Text аутоматски прелама само дуге редове унутар свог контејнера. Ако се текст не прелама, провјерите: постоји ли ограничење ширине родитељског View-а, да ли је nowrap постављен у стиловима и да ли numberOfLines премашује доступан број редова.
Користите угњежђени Text са fontWeight: 'bold' или умотајте текст у компоненту са овим стилом. Такође се може примијенити fontWeight: '700' или '800' за дебље истање. Дебљина зависи од доступности одговарајуће гарнитуре фонта на уређају.
Не, Text може садржати само друге Text компоненте или стрингове. Image не може бити потомак Text-а. За приказ текста са иконицама користите View са Text и Image као сусједне елементе или компоненту која подржава уграђивање слика.
Закључци
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође