Умовна праця React і адражэнне спісу без додатковых засобаў
Явныя галузі, стабільныя ключы спісаў і шаблоны, якія падтрымляюць чытальнасць умовнай логікі UI, калі компаненты ў працоўных дапрацоўках на React вырастаюць за межы простых прыкладаў.
У гэтым керавані перадаецца спосаб рэалізацыі для: умовнай выкладкі элементаў у 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. Для справакі: перш чым зменяць код, неабходна ясная дэфініцыя вхідных дадзеных, адпаведнага адпаведальнага за крок і крэтарыяў выходу. Аператары должны магчымае перзапускать крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і затраты разам з функцыйнальнымі рэзультатамі. Раннія відкрытасць усіх параметраў запобегае неспакою ў спальнаваных средах.
Чэк-ліст для эксплуатацыі
Для канцэларскага списку аператывных задач неабяжна прадзеява інпутаў, адпаведальнага за кожны крок і крэатарыяў завершэння працы перад зменым коду. Аператары должны магчымае запускіць крок з вядомай точкі контролю, не падозрываючы прыхованы статус.
Спрыяйце гэтаму этапу як кантракту межа інпутамі і перакананымы выходнымі дадзеннямі. Даўце назвы артыфактам, прадзеяваце перакананні на успех і адмовіцеся ад тых падчасовых завершэнняў, якія не зафіксаваны.
Валідзіце явныя умовныя аспекты выканання замест таго, каб викорыстоўваць хитрыя способы, якія прыховвалі бісы ў рэальных умовах.
Валідзіце простую надзейнасць замест крэатіўных, адночасовых дэманстрацый.
Запісвайце час выканання і косты праза функцыональныя рэзултаты. Відкрыты статус з самага пачатку запобегае неспакоўным рахункам у спільных средах.
Валідзіце явныя умовныя аспекты выканання замест таго, каб викорыстоўваць хитрыя способы, якія прыховвалі бісы ў рэальных умовах.
Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критичных ліній і паказаце крокі з вярнення да пачатковага стану. У спільных середавішчах неабяжна наявнасць лімітаў шырокаспектавага выкарыстоўвання, пераказах прыналежнасці і чыстага власніка для змены секрэтных даных.