Text: ce este, afișarea textului și React Native

Autor: IT Sectr Publicat: 2026-07-05 Timp de citire: 9 min

Componenta Text în React Native este singura modalitate de afișare a textului pe ecran, spre deosebire de web, unde se folosesc diferite taguri (p, span, h1-h6). Text suportă imbricarea pentru moștenirea în cascadă a stilurilor, gestionarea evenimentelor de atingere și întreruperea automată a rândurilor. Conform React Native Docs, 2024, Text este a doua cea mai folosită componentă după View. Componenta se renderuiește în UILabel nativ pe iOS și TextView pe Android, asigurând funcționarea corectă a fonturilor și accesibilității.

Principalele puncte

  • Text este singura componentă React Native pentru afișarea textului
  • Suportă imbricarea pentru stilizarea părților individuale ale textului
  • Text moștenește stilurile de la componentele Text părinte
  • Se renderuiește în UILabel pe iOS și TextView pe Android
  • Suportă numberOfLines și adjustsFontSizeToFit pentru gestionarea afișării

Ce este Text în React Native

Text este o componentă React Native pentru afișarea conținutului text. Spre deosebire de dezvoltarea web, unde există numeroase taguri semantice pentru text, în React Native toate elementele text sunt create prin Text. Componenta poate afișa atât text simplu, cât și structuri complexe cu Text imbricate și fragmente stilizate.

Text gestionează automat întreruperea rândurilor, controlează familia de caractere, dimensiunea, culoarea și alinierea. Componenta suportă evenimente de atingere (onPress), permițând crearea de linkuri clickabile fără împachetări suplimentare. O limitare importantă: Text nu poate fi introdus direct în View — doar în alte componente Text sau ca conținut direct.

Conform React Native Nested Text, 2024, componentele Text imbricate moștenesc stilurile de la părinte. Acest lucru permite setarea unui stil de bază la nivel superior și suprascrierea proprietăților individuale pentru fragmente specifice — similar modului în care funcționează span cu CSS în web.

Proprietăți și API ale componentei Text

Componenta Text oferă un set de props pentru gestionarea afișării, comportamentului și accesibilității. Categorii cheie: props de stil (font, dimensiune, culoare, aliniere), props de afișare (numberOfLines, lineBreakMode) și interactive (onPress, onLongPress).

Props de afișare a textului

numberOfLines limitează numărul de rânduri afișate, adăugând puncte de suspensie la sfârșit. ellipsizeMode controlează poziția punctelor de suspensie (head, middle, tail, clip). adjustsFontSizeToFit reduce automat dimensiunea fontului pentru ca textul să încapă în limitele date. lineBreakMode determină modul de tăiere a textului dincolo de numberOfLines.

Props interactive

Text suportă onPress și onLongPress pentru gestionarea atingerilor. Acest lucru permite crearea de linkuri text fără a utiliza TouchableOpacity. onTextLayout returnează informații despre poziționarea textului după randare — util pentru animații și poziționare.

Props de platformă

Pe iOS sunt disponibile disabled (dezactivează textul), selectable (activează selecția), dataDetectorTypes (recunoașterea automată a linkurilor, telefoanelor, adreselor). Pe Android sunt disponibile selectable (prin textSelectable), includeFontPadding (elimină spațiile suplimentare).

Diferențele între Text și elementele HTML p și span

Deși Text seamănă vizual cu tagurile HTML p și span, diferențele arhitecturale sunt semnificative. În React Native lipsește modelul DOM cu elemente text semantice — toate nodurile text sunt gestionate printr-o singură componentă Text cu diferite props.

CaracteristicăText (React Native)p / span (HTML)
ImbricareText în Text — moștenirea stilurilorp nu poate conține p; span în p
margin implicitFără margini implicitep are margin-block-start/end
Întreruperea rândurilorAutomată în interiorul containeruluip — bloc, span — inline
Suport onPressSuport încorporatNecesită împachetare suplimentară
Moștenirea stilurilorDa, de la Text părinteDa, cascada CSS

Diferența cheie — moștenirea stilurilor prin imbricarea Text. Dacă Text exterior are fontSize: 18 și color: blue, toate Texturile imbricate moștenesc aceste stiluri. Orice prop poate fi suprascris în Textul interior prin setarea unei valori specifice. Acest lucru economisește cod și face structura mai curată.

Stilizarea textului și fonturile

Text suportă majoritatea proprietăților CSS pentru tipografie: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform. În React Native, fonturile se conectează la nivel de platformă, nu prin @font-face.

Conectarea fonturilor personalizate

Pentru a utiliza fonturi personalizate, acestea trebuie adăugate în folderul assets/fonts și specificate în react-native.config.js. După reconstruirea aplicației, fontul devine disponibil prin fontFamily. React Native nu suportă direct fonturile web (Google Fonts) — este necesară descărcarea fișierelor .ttf sau .otf.

Moștenirea și cascada stilurilor

Mecanismul de moștenire în Text diferă de CSS. Stilurile se transmit doar de la Text la Text imbricat, dar nu de la View la Text. Dacă trebuie setat un font pentru întreaga aplicație, se utilizează defaultProps ale componentei Text sau o componentă wrapper personalizată.

js
<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>

În acest exemplu, Textul exterior setează fontSize: 18 și color: #333. Textul interior moștenește fontSize (18), dar suprascrie fontWeight la bold și color la #007AFF. Textul exterior moștenește doar propriile stiluri. Aceasta este o analogie exactă a modului de funcționare a spanurilor imbricate în HTML.

Exemple practice cu Text

Să analizăm două scenarii tipice de utilizare a Text în React Native: formatarea textului cu imbricare și crearea unei componente clickabile cu limitare de rânduri.

Exemplul 1: card de știri cu formatare

În acest exemplu, Text este utilizat pentru afișarea textului pe mai multe rânduri cu elemente evidențiate: titlu, dată și conținut cu link.

js
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>
);

În această structură există trei componente Text independente (titlu, dată, conținut), fiecare cu propriul stil. În interiorul Textului cu conținut este imbricat un alt Text cu onPress pentru link. Acest model este utilizat pentru fluxuri de știri, bloguri și comentarii.

Exemplul 2: text cu limitare de rânduri

Pentru afișarea previzualizării textului cu puncte de suspensie se utilizează numberOfLines. Acesta este un model standard pentru cardurile de produse și articolele din liste.

js
<Text
    numberOfLines={2}
    ellipsizeMode="tail"
    style={styles.preview}
>
    {longDescription}
</Text>

Proprietatea numberOfLines = 2 limitează textul la două rânduri. Dacă textul este mai lung, React Native adaugă automat puncte de suspensie la sfârșitul celui de-al doilea rând. Parametrul ellipsizeMode: 'tail' indică faptul că punctele de suspensie trebuie să fie la sfârșit (sunt disponibile și head, middle, clip).

Întrebări frecvente

De ce în React Native nu există taguri h1, p, span?

React Native utilizează un set minimalist de componente pentru compatibilitate cross-platform. În locul mai multor taguri HTML semantice, se folosește un singur Text cu diferite stiluri. Acest lucru simplifică randarea pe ambele platforme dintr-o singură bază de cod.

Pot folosi Text ca buton?

Da, Text suportă onPress și onLongPress pentru gestionarea atingerilor. Cu toate acestea, pentru butoane cu feedback vizual (iluminare la apăsare) este mai bine să folosiți TouchableOpacity sau Pressable cu Text în interior. Text.onPress nu oferă indicare vizuală a apăsării în mod implicit.

De ce textul meu nu se întrerupe?

Text întrerupe automat doar rândurile lungi în interiorul containerului său. Dacă textul nu se întrerupe, verificați: există o limită de lățime a View-ului părinte, nu este setat nowrap în stiluri și numberOfLines nu depășește numărul disponibil de rânduri.

Cum fac text bold în interiorul Text?

Utilizați Text imbricat cu fontWeight: 'bold' sau împachetați textul într-o componentă cu acest stil. De asemenea, puteți aplica fontWeight: '700' sau '800' pentru o îngroșare mai mare. Grosimea depinde de disponibilitatea fontului corespunzător pe dispozitiv.

Poate Text să conțină o imagine?

Nu, Text poate conține doar alte componente Text sau șiruri. Image nu poate fi descendent al Text. Pentru afișarea textului cu icoane, utilizați View cu Text și Image ca elemente adiacente sau o componentă care suportă încorporarea imaginilor.

Concluzii

  • Text — singura componentă React Native pentru afișarea textului, înlocuind p, span, h1-h6 din web
  • Suportă imbricarea cu moștenirea stilurilor de la componenta Text părinte
  • Props cheie: numberOfLines, ellipsizeMode, onPress, selectable, adjustsFontSizeToFit
  • Text se renderuiește în UILabel nativ (iOS) sau TextView (Android)
  • Fonturile se conectează la nivel de platformă prin fontFamily în StyleSheet
  • Stilurile Text nu se moștenesc de la View — necesită setare explicită sau defaultProps
  • Pentru linkuri clickabile, utilizați Text imbricat cu onPress, nu TouchableOpacity

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și