# react-native: 分支组件
URL: https://generaltranslation.com/zh/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) - 处理 runtime 翻译
* API 参考:
* [`` 组件](/docs/react-native/api/components/branch)