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 предоставляет набор пропсов для управления отображением, поведением и доступностью. Ключевые категории: стилевые пропсы (шрифт, размер, цвет, выравнивание), пропсы отображения (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

Хотя Text визуально похож на HTML-теги p и span, архитектурные различия существенны. В React Native отсутствует DOM-модель с семантическими текстовыми элементами — все текстовые узлы обрабатываются через единый компонент Text с различными пропсами.

Характеристика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 не поддерживает web-шрифты (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 как соседние элементы или компонент с support для встраивания изображений.

Итоги

  • 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также