Please open Telegram to view this post
VIEW IN TELEGRAM
🌚2
Казалось бы, простой условный рендеринг. Но вот вам сюрприз.
Когда
items пустой массив, items.length равен 0. В JavaScript 0 — это falsy значение, поэтому выражение 0 && <ul> вернет 0.React рендерит числа, поэтому на экране появится цифра
0!function ProductList({ items }) {
return (
<div>
<h2>Товары</h2>
{items.length > 0 && <ul>
{items.map(item => <li key={item.id}>{item.name}</li>)}
</ul>}
</div>
);
}Или еще лучше:
{!!items.length && <ul>...</ul>}Или тернарный оператор:
{items.length ? <ul>...</ul> : null}
Оператор && возвращает первое falsy значение или последнее truthy:
0 && <Component /> → вернет 0 (React рендерит!)
false && <Component /> → вернет false (React не рендерит)
true && <Component /> → вернет <Component />
React не рендерит: false, null, undefined, true
React рендерит: числа (0, 1, -1), строки, компоненты
#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1