主题
条件渲染与列表渲染(map、&&、三元运算)
React 提供了多种方法来控制组件的渲染,条件渲染和列表渲染是两种非常常见的渲染方式。理解这些方法可以帮助你根据不同条件或数据动态渲染 UI。
1. 条件渲染
在 React 中,条件渲染是指根据不同的条件来决定是否渲染某些元素或组件。常用的方式有三种:三元运算符、逻辑与运算符 (&&
) 和 if
语句。
1.1 使用三元运算符
三元运算符是一种简单的条件渲染方法,语法为:
jsx
condition ? trueCase : falseCase
例如,根据用户是否登录显示不同的按钮:
jsx
const isLoggedIn = true;
const button = (
<button>
{isLoggedIn ? 'Logout' : 'Login'}
</button>
);
如果 isLoggedIn
为 true
,按钮显示 Logout
,否则显示 Login
。
1.2 使用逻辑与(&&
)
逻辑与运算符 (&&
) 可以用来执行条件渲染。如果左侧的条件为 true
,则渲染右侧的内容,否则什么都不渲染:
jsx
const messages = ['Message 1', 'Message 2'];
const element = (
<div>
{messages.length > 0 && <h2>You have new messages!</h2>}
</div>
);
在这个例子中,只有当 messages.length > 0
为 true
时,才会渲染 <h2>
标签。
1.3 使用 if
语句
if
语句不能直接在 JSX 中使用,但你可以在渲染函数外部使用它来进行条件判断:
jsx
function Greeting(props) {
if (props.isLoggedIn) {
return <h1>Welcome back!</h1>;
}
return <h1>Please sign up.</h1>;
}
在这个例子中,如果 props.isLoggedIn
为 true
,则返回一个欢迎信息,否则返回提示用户注册的信息。
2. 列表渲染(map
)
React 允许你通过 map()
方法遍历数组并渲染列表项。常见的做法是在 render()
方法或函数组件中使用 map
来生成列表。
2.1 使用 map()
渲染列表
假设我们有一个字符串数组,并且想要渲染每个字符串为一个列表项:
jsx
const items = ['Apple', 'Banana', 'Cherry'];
const listItems = items.map((item, index) =>
<li key={index}>{item}</li>
);
const element = <ul>{listItems}</ul>;
在上述代码中,我们使用 map()
方法遍历 items
数组并为每个元素生成一个 li
元素。记得为每个元素提供一个唯一的 key
属性,以帮助 React 高效地管理 DOM。
2.2 使用 map()
渲染更复杂的组件
你还可以使用 map()
渲染更复杂的组件,例如:
jsx
const users = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 },
{ id: 3, name: 'Charlie', age: 35 }
];
const userList = users.map((user) =>
<UserCard key={user.id} name={user.name} age={user.age} />
);
const element = <div>{userList}</div>;
在此例中,map()
遍历 users
数组并为每个用户生成一个 UserCard
组件。
3. 结合条件渲染和列表渲染
你可以将条件渲染和列表渲染结合使用。例如,只有在列表不为空时才渲染列表:
jsx
const messages = ['Message 1', 'Message 2'];
const element = (
<div>
{messages.length > 0 ? (
<ul>
{messages.map((message, index) => <li key={index}>{message}</li>)}
</ul>
) : (
<p>No messages</p>
)}
</div>
);
这里我们先通过三元运算符检查 messages
数组的长度。如果数组非空,则渲染消息列表;如果数组为空,则显示一条提示信息。
总结
条件渲染和列表渲染是 React 中两种常见的渲染模式。通过灵活使用 map
、三元运算符、逻辑与运算符以及 if
语句,可以根据不同的条件和数据动态更新 UI。