Рендер за умовою
Для рендеру розмітки за умовою використовуються оператори розгалужень та умов. Умови можна перевіряти перед поверненням розмітки або прямо в JSX.
інформація
Якщо за умовою нічого не повинно бути відрендерено, можна повернути null
,
undefined
або false
, вони не рендеряться.
if
за допомогою логічного оператора &&
Читається як: якщо умова приводиться до true
, то рендерим розмітку.
const Mailbox = ({ unreadMessages }) => {
return (
<div>
<h1>Hello!</h1>
{unreadMessages.length > 0 && (
<p>You have {unreadMessages.length} unread messages.</p>
)}
</div>
);
};
if...else
за допомогою тернарного оператора
Читається як: якщо умова приводиться до true
, рендерим розмітку після ?
,
інакше – рендерим розмітку після :
.
const Mailbox = ({ username, unreadMessages }) => {
return (
<div>
<h1>Hello {username}</h1>
{unreadMessages.length > 0 ? (
<p>You have {unreadMessages.length} unread messages.</p>
) : (
<p>No unread messages.</p>
)}
</div>
);
};
Останній приклад можна записати по-іншому, результат буде однаковий.
const Mailbox = ({ name, unreadMessages }) => {
return (
<div>
<h1>Hello {name}</h1>
<p>
{unreadMessages.length > 0
? `You have ${unreadMessages.length} unread messages.`
: "No unread messages."}
</p>
</div>
);
};
Нехай у компоненті продукту ще є його доступна кількість.
const Product = ({ imgUrl, name, price, quantity }) => (
<div>
<img src={imgUrl} alt={name} width="640" />
<h2>{name}</h2>
<p>Price: {price}$</p>
<h1>Quantity: {quantity < 20 ? "Few left" : "In stock"}</h1>
<button type="button">Add to cart</button>
</div>
);