Умовна праця React і адражэнне спісу без додатковых засобаў
Явныя галузі, стабільныя ключы спісаў і шаблоны, якія падтрымляюць чытальнасць умовнай логікі UI, калі компаненты ў працоўных дапрацоўках на React вырастаюць за межы простых прыкладаў.
Крыніцы: React Conditional Rendering and List Rendering — and the True Nature of key
У гэтым керавані перадаецца спосаб рэалізацыі для: умовнай выкладкі элементаў у React і выкладкі спісаў — а таксама справжняя прырода атрыбута key. Акцэнт ставіцца на правілах, пераконтрацыях і кодзе, які можна проста дадаць у рэпазітарый без неабяснення меты. Для загальнага адгледжэння, перш чым зменяць код, неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аперацыёныя працавнікі должны магчымае перадзеяць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выканання і вітраты разам з функцыйнальнымі рэзултатамі. Раннее адгледжэння запобегае неспакоўным рахункам у спільных срэдах.
Умовная выкладка — паказваць чы не паказваць
Для умовнай вываркі — каб паказаць чы не паказаць, неабяжна задаць вхідныя даны, адміністратара крока і крытэрыя завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчыма ўвайсці крок з вядомай точкі контролю без адгадвання захаванага стану. Конфігурацыю трэба залічыць пазнаходзяцца за межамі коду прыемленае. Файлы сераўнавання, хранільнікі секрэтных даных і флагі функцый належыць у аднам месца, якое можна пераглядаць працавнікамі. Размешчайце тыпы разам з компанентамі і трэба залічыць праблемы з параметрамі меркавымі. Занадта большыя наборы параметраў стаюць прычынай боргу, якога праглаў захістыць TypeScript.
Падход 1 — Разгалужэнне з if, і вяртаеце null, калі нічога не паказваеце
Для падчыннага спосабу 1 — гілка з if, якая вяртае null, калі нічога не атрымліваецца, неабяжна прадзеявіць вхідныя даны, абяронца крока і крэтарыі выходу пры перадзеявленні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю без адгадванняя схованага стану.
Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнасці. Перапрыбуткі і апрацоўка некорэктных паведамленняў ёсць часткай продукту.
Размешчаеце тыпы разам з компанентамі і трэба заставляць прызначэннія залішацца скуранымі. Занадта большыя прызначэння стаюць «боргамі», якіх мяў бы запобiec TypeScript.
type Props = { isInStock: boolean };
function StockBadge({ isInStock }: Props) {
if (!isInStock) {
return null; // out of stock — draw nothing
}
return <span className="badge">In stock</span>;
}
Падчынны спосаб 2 — Адзін з двух за дапамою тэрнарнага аператара
Для падчыннага 2 — аднаго з двух з вярткім апэраблам, паказвайце вхідныя даны, адміністратара крока і крытэрыя выходу прытаму, перш чым зменіце код. Апэраблы должны магчымаць паўтарную рэалізацію крока з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Валічыце маленькія, тэставальныя елементы працоўнае скрыпты. Калі крок не выйша, прычына неудачы павінна вказываць на адную адпаведальнасць. Размешчайце тыпы разам з компанентамі і трывожце параметры ў меры. Занадта большыя наборы параметраў стаюць «заборгаванням», якога мяркалася запобiec TypeScript. Для падчыннага 2 — аднаго з двух з вярткім апэраблам, паказвайце вхідныя даны, адміністратара крока і крытэрыя выходу прытаму, перш чым зменіце код. Апэраблы должны магчымаць паўтарную рэалізацію крока з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выканання і затраты праза функцыйнае рэзультат. Відкрытыя даны з самага пачатку запобiegаюць неспакоўным рашчытам у спільных срэдах.
function StockBadge({ isInStock }: Props) {
return (
<span className="badge">
{isInStock ? 'In stock' : 'Out of stock'}
</span>
);
}
Падчынны спосаб 3 — “Толькі калі” з &&
Для падчыннага спосабу 3 — “Толькі калі” з && неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры перадзмене коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан.
Конфігурацыю трэба залічваць пазнародзе ад коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць.
Лепш выбіраць явныя умовныя фарматыванні, чым хітрые скорачэнняя, якія прадаюць багі ў прыменні.
function Cart({ count }: { count: number }) {
return (
<div>
<h2>Cart</h2>
{count > 0 && <p>Items in cart: {count}</p>}
</div>
);
}
Найпашыльнейшая пастка && — цыфра 0
Для найбольш частае падэжкі && — цыфры 0, неабяжна практычна вакуумацыя інпутаў, власніка крока і крэатывных крытарыяў пры перамены коду. Аператары павінны магчымаць перапрыявленне крока з вядомай точкі контролю без адгадванняя схованага статаусу.
Дакументавайце як шлях успеху, так і шлях вярнення разам. Перапрыявленні і адарожэнне некорэктных паведамленняў ёсць часткай продукту.
Вядомей выбірайце явную умовную рэндэраванне замест адчынных скорачэнняў, якія хаваюць багі ў прыемным рэжыме.
function Cart({ count }: { count: number }) {
return (
<div>
<h2>Cart</h2>
{/* 🔴 trap: if count is 0, "0" shows up on screen */}
{count && <p>Items in cart: {count}</p>}
</div>
);
}
function App() {
return (
<>
<Cart count={0} />
<Cart count={10} />
</>
);
}
export default App;
// ✅ count > 0 is true/false, so it's safe
{count > 0 && <p>Items in cart: {count}</p>}
Рэндэраванне ліста — атрыбутыванне масэў у цыкле
Для адраптавання спісу — падзеўвання масы ў цыкле, перш чым зменяць код, неабходна задаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабясненняя схованага стану. Валіце маленькія, тэставальныя елементы замест вялікіх скрыптав. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць. Валіце явны адраптавання на адпаведнасці замест хітрых способаў, якія маскуюць багі ў працоўным сераверы. Для адраптавання спісу — падзеўвання масы ў цыкле, перш чым зменяць код, неабходна задаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабясненняя схованага стану. Запішыце час выканання і вартасць разам з функцыональнымі рэзультатамі. Відкрытая візуабілізацыя запобегае неспакою ў спальнаваных срэдах.
type Product = {
id: number;
name: string;
price: number;
};
const products: Product[] = [
{ id: 1, name: 'Mechanical Keyboard', price: 89000 },
{ id: 2, name: 'Wireless Mouse', price: 45000 },
{ id: 3, name: 'USB Hub', price: 23000 },
];
function ProductList() {
return (
<ul>
{products.map((product) => (
<li key={product.id}>
{product.name} — {product.price.toLocaleString()} won
</li>
))}
</ul>
);
}
key — атрыбут назвы, які React выкарыстоўвае для розразнення элементаў
Для ключа — атрыбута Name Tag React, які выкарыстоўваецца для розразнення элементаў, неабходна прадзефінаваць параметры, власніка крока і крытэрыя завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць паза кодам прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыяй должны знаходзіцца ў аднам месцы, якое можна пераглядаць працавнікамі. Спіс ключоў павінен складацца з стабільных бізнес-ID, а не з індэксаў масівы, калі парадак можа змяніцца.
Warning: Each child in a list should have a unique "key" prop.
Ключы Должны Быць “Стабільнымі і Унікальнымі”
Каблі должны быць «стабільнымі і унікальнымі»; перад зменайом коду неабяжна задаць вхідныя даны, власніка крока і крытэрыі завершэння. Аперацыямі неабяжна маты можлівасць парадзейсці крока з вядомага пункта контролю без неабяжнай адгадвання схованага стану. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі і обработка некорэктных паведамленняў ёсць часткай продукту. Спіс ключоў павінен складацца з стабільных бізнес-ID, а не з індэксаў масівы, калі парадак можа змяніцца.
<li key={product.id}> // ✅ each product's unique id — stable
Апасцярожна — не вжывайце індэкс масівы як ключ
Для Trap: не выкорыстоўваюце індэкс масівы як ключ, абавязкова задайце вхідныя даны, адпаведальнага за крок і крэтарыі выходу пры змяне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Валідзіце маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выконваецца, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць. Спісы ключоў должны складацца з стабільных бізнес-ID, а не з індэксаў масівы, калі парадак можа змяніцца. Для Trap: не выкорыстоўваюце індэкс масівы як ключ, абавязкова задайце вхідныя даны, адпаведальнага за крок і крэтарыі выходу пры змяне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выканання і вартасць разам з функцыональнымі рэзультатамі. Раннія візуабілізацыя запобегае неспакою з боку расходам у спільных срэдах.
// 🔴 common but dangerous pattern
{products.map((product, index) => (
<li key={index}>{product.name}</li>
))}
Аднаўленне — Умовы + Спісак
Для складання — умовы + спіс: перш чым зменяць код, неабходна дэфініцыя вхідных даных, адміністратара крока і крэтэрыяў завершэння. Аперацыямі неабходна можлівасць паўтарнага запуску крока з вядомай точкі контролю, без неабязковасці здогадвацца пра схованы стан. Конфігурацыю трэба залічыць параду з кодам прыемлі. Файлы сераўнавання, храненні секрэтных даных і флагі функцыяў должны знаходзіцца ў аднам месцы, якое можна пераглядаць. Тыпы трэба размешчаць ручой з компанентамі, а прызначэннія залішаць часткавымі. Занадта большыя прызначэння стаюць «боргам», якім TypeScript меў на мету запобiec.
type Product = {
id: number;
name: string;
price: number;
inStock: boolean;
};
function ProductList({ products }: { products: Product[] }) {
// when the list is empty — conditional rendering
if (products.length === 0) {
return <p>No products to display.</p>;
}
return (
<ul>
{products.map((product) => (
<li key={product.id}>
{product.name} — {product.price.toLocaleString()} won
{/* badge only when out of stock — && (safe since the left side is boolean) */}
{!product.inStock && <span className="badge"> (Out of stock)</span>}
</li>
))}
</ul>
);
}
// dummy data — swap in an empty array [] to see the "No products" message
const products: Product[] = [
{ id: 1, name: 'Mechanical Keyboard', price: 89000, inStock: true },
{ id: 2, name: 'Wireless Mouse', price: 42000, inStock: false },
{ id: 3, name: 'USB-C Hub', price: 35000, inStock: true },
];
function App() {
return <ProductList products={products} />;
}
Заключанне
Ёнколі, перш чым зменяць код, неабходна ясная дэфініцыя вхідных даных, адпаведальнага за крок і крэтарыяў завершэння. Аперацыйныя працавнікі должны магчыма ўвайсці ў крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі і обработка некорэктных паведамленняў ёсць часткай продукту. Тыпы трэба размешчаць ручой з компанентамі, а параметры — залічваць скромнымі. Занадта большыя наборы параметраў ствараюць тую саму проблему, якой і мягчыўся TypeScript.
Справакі
Для справакі: перш чым зменяць код, неабходна ясная дэфініцыя вхідных дадзеных, адпаведнага адпаведальнага за крок і крэтарыяў выходу. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Валідзіце маленькія, тэставаныя елементы замест абмежлівых скрыптав. Калі крок не выйшоў, прычына неудачы павінна вказываць на адзін конкрэтны аспект. Размешчайце тыпы разам з компанентамі і старайцеся, каб параметры былі лаконічныя. Занадта большыя наборы параметраў ствараюць тую самую “заборгаванасць”, якой і мяў запобегчы TypeScript. Для справакі: перш чым зменяць код, неабходна ясная дэфініцыя вхідных дадзеных, адпаведнага адпаведальнага за крок і крэтарыяў выходу. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выканання і затраты разам з функцыйнальнымі рэзультатамі. Раннія відкрытасць усіх параметраў запобегае неспакою ў спальнаваных срэдах.
Чэк-ліст для эксплуатацыі
Для канцэларскага спіску аператывных задач неабяжна прадзеява інпутаў, адпаведальнага за кожны крок і крэатарыяў завершэння працы перад зменым коду. Аператары должны магчымае запускіць крок з вядомай точкі контролю, не падозрываючы прыхованы статус.
Спрыяйце гэтаму этапу як кантракту межа інпутамі і перакананымы выходнымі дадзеннямі. Даўце назвы артыфактам, прадзеяваце перакананні на успех і адмовіцеся ад тых падчасовых завершэнняў, якія не зафіксаваны.
Валідзіце явныя умовныя аспекты выканання замест таго, каб вікорыстоўваць хітрыя способы, якія прыховвалі бісы ў рэальных умовах.
Валідзіце простую надзейнасць замест крэатыўных, адночасовых дэманстрацый.
Запісвайце час выканання і косты праза функцыональныя рэзултаты. Відкрыты статус з самага пачатку запобегае неспакоўным рахункам у спільных срэдах.
Валідзіце явныя умовныя аспекты выканання замест таго, каб вікорыстоўваць хітрыя способы, якія прыховвалі бісы ў рэальных умовах.
Перш чым запускаць стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для крытычных ліній і паказаце крокі з вярнення да пачатковага стану. У спільных серэдавішчах неабяжна наявнасць лімітаў шырокаспектавага выкарыстоўвання, пераказах прыналежнасці і чыстага власніка для змены секрэтных даных.