Text: какво е, показване на текст и React Native

Автор: IT Sectr Публикувано: 2026-07-05 Време за четене: 9 мин

Компонентът Text в React Native е единственият начин за показване на текст на екрана, за разлика от уеб, където се използват различни тагове (p, span, h1-h6). Text поддържа влагане за каскадно наследяване на стилове, обработка на събития на докосване и автоматично пренасяне на редове. Според React Native Docs, 2024, Text е вторият най-често използван компонент след View. Компонентът се рендерира до нативен UILabel на iOS и TextView на Android, осигурявайки правилна работа на шрифтовете и достъпността.

Основни точки

  • Text е единственият компонент на React Native за показване на текст
  • Поддържа влагане за стилизиране на отделни части от текста
  • Text наследява стилове от родителските Text компоненти
  • Рендерира се до UILabel на iOS и TextView на Android
  • Поддържа numberOfLines и adjustsFontSizeToFit за управление на показването

Какво е Text в React Native

Text е компонент на React Native за показване на текстово съдържание. За разлика от уеб разработката, където съществуват множество семантични тагове за текст, в React Native всички текстови елементи се създават чрез Text. Компонентът може да показва както обикновен текст, така и сложни структури с вложени Text и стилизирани фрагменти.

Text автоматично обработва пренасянето на редове, управлява шрифтовото семейство, размера, цвета и подравняването. Компонентът поддържа събития на докосване (onPress), което позволява създаването на кликаеми връзки без допълнителни обвивки. Важно ограничение: Text не може да се поставя директно в View — само в други Text компоненти или като директно съдържание.

Според React Native Nested Text, 2024, вложените Text компоненти наследяват стилове от родителя. Това позволява задаване на базов стил на горното ниво и презаписване на отделни свойства за конкретни фрагменти — аналогично на работата на span с CSS в уеб.

Свойства и API на компонента Text

Компонентът Text предоставя набор от props за управление на показването, поведението и достъпността. Ключови категории: стилови props (шрифт, размер, цвят, подравняване), props за показване (numberOfLines, lineBreakMode) и интерактивни (onPress, onLongPress).

Props за показване на текст

numberOfLines ограничава броя на показваните редове, добавяйки многоточие в края. ellipsizeMode управлява позицията на многоточието (head, middle, tail, clip). adjustsFontSizeToFit автоматично намалява размера на шрифта, така че текстът да се побере в зададените граници. lineBreakMode определя как да се отреже текстът извън numberOfLines.

Интерактивни props

Text поддържа onPress и onLongPress за обработка на докосвания. Това позволява създаване на текстови връзки без използване на TouchableOpacity. onTextLayout връща информация за позицията на текста след рендериране — полезно за анимации и позициониране.

Платформени props

На iOS са налични disabled (изключва текста), selectable (включва избиране), dataDetectorTypes (автоматично разпознаване на връзки, телефони, адреси). На Android са налични selectable (чрез textSelectable), includeFontPadding (премахва излишни разстояния).

Разлики между Text и HTML елементите p и span

Въпреки че Text визуално прилича на HTML таговете p и span, архитектурните разлики са съществени. В React Native липсва DOM модел със семантични текстови елементи — всички текстови възли се обработват чрез единен компонент Text с различни props.

Характеристика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 наследяват тези стилове. Всяко свойство може да бъде презаписано във вътрешния 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 или персонализиран компонент-обвивка.

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>

В този пример външният Text задава fontSize: 18 и color: #333. Вътрешният Text наследява fontSize (18), но презаписва fontWeight на bold и color на #007AFF. Външният Text наследява само своите стилове. Това е точна аналогия на работата на вложени span в HTML.

Практически примери с Text

Нека разгледаме два типични сценария за използване на Text в React Native: форматиране на текст с влагане и създаване на кликаем компонент с ограничение на редовете.

Пример 1: новинарска карта с форматиране

В този пример Text се използва за показване на многоредов текст с подчертани елементи: заглавие, дата и съдържание с връзка.

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

В тази структура има три независими Text компонента (заглавие, дата, съдържание), всеки със свой стил. Вътре в Text със съдържание е вложен още един Text с onPress за връзката. Този модел се използва за новинарски канали, блогове и коментари.

Пример 2: текст с ограничение на редовете

За показване на преглед на текст с многоточие се използва numberOfLines. Това е стандартен модел за карти на продукти и статии в списъци.

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

Свойството numberOfLines = 2 ограничава текста до два реда. Ако текстът е по-дълъг, React Native автоматично добавя многоточие в края на втория ред. Параметърът ellipsizeMode: 'tail' указва, че многоточието трябва да е в края (head, middle, clip също са налични).

Често задавани въпроси

Защо в React Native няма тагове h1, p, span?

React Native използва минималистичен набор от компоненти за междуплатформена съвместимост. Вместо множество семантични HTML тагове се прилага един Text с различни стилове. Това опростява рендерирането на двете платформи от една кодова база.

Може ли Text да се използва като бутон?

Да, Text поддържа onPress и onLongPress за обработка на докосвания. Въпреки това, за бутони с визуална обратна връзка (осветяване при натискане) е по-добре да използвате TouchableOpacity или Pressable с Text вътре. Text.onPress не предоставя визуална индикация за натискане по подразбиране.

Защо текстът ми не се пренася?

Text автоматично пренася само дълги редове вътре в своя контейнер. Ако текстът не се пренася, проверете: има ли ограничение на ширината на родителския View, не е ли зададено nowrap в стиловете и дали numberOfLines не надвишава наличния брой редове.

Как да направя удебелен текст вътре в Text?

Използвайте вложен Text с fontWeight: 'bold' или увийте текста в компонент с този стил. Може също да приложите fontWeight: '700' или '800' за по-удебелено изписване. Дебелината зависи от наличието на съответния шрифт на устройството.

Може ли Text да съдържа изображение?

Не, Text може да съдържа само други Text компоненти или низове. Image не може да бъде наследник на Text. За показване на текст с икони използвайте View с Text и Image като съседни елементи или компонент, който поддържа вграждане на изображения.

Обобщение

  • Text — единственият компонент на React Native за показване на текст, заместващ p, span, h1-h6 от уеб
  • Поддържа влагане с наследяване на стилове от родителския Text компонент
  • Ключови свойства: numberOfLines, ellipsizeMode, onPress, selectable, adjustsFontSizeToFit
  • Text се рендерира до нативен UILabel (iOS) или TextView (Android)
  • Шрифтовете се свързват на ниво платформа чрез fontFamily в StyleSheet
  • Стиловете на Text не се наследяват от View — изисква се изрично задаване или defaultProps
  • За кликаеми връзки използвайте вложен Text с onPress, а не TouchableOpacity

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също