# react-native: Компоненты ветвления URL: https://generaltranslation.com/ru/docs/react-native/guides/branches.mdx --- title: Компоненты ветвления description: Как использовать компоненты ветвления для условного контента в переводах --- {/* СГЕНЕРИРОВАНО АВТОМАТИЧЕСКИ: Не редактируйте напрямую. Вместо этого измените шаблон в content/docs-templates/. */} Компоненты ветвления позволяют условно отображать содержимое внутри компонентов [``](/docs/react-native/api/components/t). Они обрабатывают динамическую логику, такую как операторы if/else и правила образования множественного числа, обеспечивая при этом корректный перевод всех вариантов содержимого. ## Доступные компоненты * [``](/docs/react-native/api/components/branch): Условный контент в зависимости от значений или состояний * [``](/docs/react-native/api/components/plural): Автоматическое образование множественного числа по правилам локали ## Быстрый старт Компоненты ветвления работают внутри [``](/docs/react-native/api/components/t) и обрабатывают условную логику: ```jsx import { T, Branch, Plural, Num, Var } from 'gt-react-native'; function NotificationPanel({ user, messageCount }) { return ( {user.name} is currently online

} away={

{user.name} is away

} >

{user.name} status unknown

You have {messageCount} message

} other={

You have {messageCount} messages

} />
); } ``` ## Как работают компоненты ветвления Компоненты ветвления решают задачу условного рендеринга в переводах следующим образом: 1. **Заменяют тернарные операторы** и условную логику внутри [``](/docs/react-native/api/components/t) 2. **Предоставляют запасной вариант содержимого**, если условия не соответствуют ожидаемым значениям 3. **Позволяют переводить** все возможные варианты содержимого 4. **Автоматически учитывают правила локали** для образования множественного числа ```jsx // ❌ Это не работает — условная логика внутри

{isActive ? 'User is active' : 'User is inactive'}

// ✅ Это работает — условная логика с ветвлением User is active

} false={

User is inactive

} />
``` ## Руководство по компонентам ### Branch — Условное содержимое Используйте [``](/docs/react-native/api/components/branch) для условного рендеринга на основе значений или состояний: ```jsx // Отображение статуса пользователя Administrator Dashboard

} user={

User Dashboard

} guest={

Guest Access

} >

Access level unknown

// Булевы условия Welcome back!

} false={

Please log in

} />
// Уровни подписки Upgrade to unlock premium features

} premium={

Enjoy your premium experience

} enterprise={

Contact support for enterprise solutions

} >

Subscription status unavailable

``` ### Множественное число — интеллектуальное образование множественного числа Используйте [``](/docs/react-native/api/components/plural) для содержимого, которое меняется в зависимости от количества: ```jsx // Базовое образование множественного числа {itemCount} item in cart

} other={

{itemCount} items in cart

} />
// Обработка нулевого значения No new notifications

} one={

{notifications} notification

} other={

{notifications} notifications

} />
// Сложное образование множественного числа (следует правилам Unicode CLDR) Due today

} one={

Due in {days} day

} few={

Due in {days} days

} many={

Due in {days} days

} other={

Due in {days} days

} />
``` ### Сочетание с компонентами переменных Компоненты ветвления и компоненты переменных легко сочетаются друг с другом: ```jsx Order {order.id} is pending. Total: {order.total}

} shipped={

Order {order.id} shipped on {order.shippedDate}

} delivered={

Order {order.id} was delivered successfully

} >

Order status unknown

``` ## Когда использовать компоненты ветвления ### Замените тернарные операторы Преобразуйте условные выражения для использования в [``](/docs/react-native/api/components/t): ```jsx // ❌ Нельзя использовать тернарный оператор в {isActive ?

Active user

:

Inactive user

}
// ✅ Используйте Branch вместо него Active user

} false={

Inactive user

} />
``` ### Обработка нескольких условий Замените конструкции switch или несколько условий if/else: ```jsx // ❌ Сложная условная логика {status === 'loading' ?

Loading...

: status === 'error' ?

Error occurred

: status === 'success' ?

Success!

:

Unknown status

}
// ✅ Чистая логика ветвления Loading...

} error={

Error occurred

} success={

Success!

} >

Unknown status

``` ### Правила образования множественного числа Замените ручную обработку форм множественного числа: ```jsx // ❌ Ручное образование множественного числа {count === 1 ?

1 item

:

{count} items

}
// ✅ Автоматическое образование множественного числа {count} item

} other={

{count} items

} />
``` ## Автономное использование Компоненты ветвления можно использовать вне [``](/docs/react-native/api/components/t) для реализации логики без перевода: ```jsx // Чистый условный рендеринг } light={} > // Чистое образование множественного числа } other={} /> ``` ## Распространённые проблемы ### Отсутствующие ключи веток Всегда указывайте запасной вариант для значений, которые не совпали ни с одной веткой: ```jsx // ❌ Нет запасного варианта для неожиданных значений } user={} // Что если userRole равно "moderator"? /> // ✅ Всегда указывайте запасной вариант } user={} > {/* Запасной вариант для любого другого значения */} ``` ### Неполные формы множественного числа Укажите необходимые формы множественного числа для локали по умолчанию: ```jsx // ❌ Отсутствует форма "other" 1 item

} // А как насчёт 0, 2, 3 и т.д.? /> // ✅ Укажите обязательные формы No items

} one={

1 item

} other={

{count} items

} /> ``` ### Сложная вложенная логика Хотя это работает, мы рекомендуем делать логику ветвления как можно проще и избегать глубокой вложенности: ```jsx // ❌ Сложная вложенная ветвящаяся логика {/* Сложно читать и поддерживать */} // ✅ Упростите логику или используйте несколько компонентов } active-offline={} inactive-online={} > ``` Подробнее о правилах образования множественного числа см. в [документации Unicode CLDR](https://cldr.unicode.org/index/cldr-spec/plural-rules). ## Следующие шаги * [Руководство по переводу строк](/docs/react-native/guides/strings) - Переводите обычный текст без JSX * [Руководство по динамическому контенту](/docs/key-concepts/dynamic-content) - Работайте с переводом во время выполнения * Справочник API: * [Компонент ``](/docs/react-native/api/components/branch)