The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2021-10-12
Vývoj softwaru

React Klíče, Ano! Potřebujete je, ale proč vlastně?

Przemysław Adamczyk

Transformace pole na seznam prvků pomocí React je poměrně jednoduchá, v podstatě stačí jen namapovat pole a vrátit správný prvek pro každý prvek pole.

Je tu ještě jedna věc, na kterou je třeba pamatovat, a to je. React Klíč atribut, musí jej mít každý prvek vykresleného seznamu. Tento koncept je jednou z prvních věcí, které se každý vývojář front-endu naučí. React na začátku jejich cesty. Pojďme se nyní podívat trochu hlouběji a prozkoumat, proč tomu tak je a kdy si můžeme zkrátit cestu.

Proč potřebujeme tento klíčový atribut?

Nejjednodušší odpověď by byla "optimalizovat re-rendery", ale úplnější odpověď musí přinejmenším zmiňovat koncept React Odsouhlasení. Jedná se o proces, při kterém se zjišťuje, jak co nejefektivněji aktualizovat uživatelské rozhraní. Aby to bylo rychlé, React musí rozhodnout, které části stromu prvků je třeba aktualizovat a které ne. Jde o to, že v DOM může být mnoho prvků a porovnávání jednotlivých prvků při rozhodování o tom, který z nich má být aktualizován, je poměrně nákladné. Chcete-li to optimalizovat, React implementuje algoritmus diffing, který je založen na dvou předpokladech:

  1. Dva různé typy prvků nebudou nikdy stejné - proto je vykreslete znovu.
  2. Vývojáři mohou ručně pomoci optimalizovat tento proces pomocí klíčových atributů, takže prvky, i když se jejich pořadí změnilo, lze rychleji lokalizovat a porovnat.

Na základě toho můžeme konstatovat, že každý Klíč React by měl být také jedinečný (v rámci seznamu prvků, nikoli globálně) a stabilní (neměl by se měnit). Co se ale může stát, když nejsou tat?

Jedinečnost, stabilita a index pole

Jak jsme již zmínili, Klíče React by měl být stabilní a jedinečný. Nejjednodušší způsob, jak toho dosáhnout, je použít jedinečné ID (například z databáze) a předat ho každému prvku při mapování pole, snadné. Ale co v situacích, kdy nemáme k dispozici ID, jméno ani jiné jedinečné identifikátory, které bychom mohli předat každému prvku? No, pokud jako klíč nepředáváme nic, React ve výchozím nastavení převezme index aktuálního pole (protože je v rámci tohoto seznamu jedinečný) a zpracuje jej pro nás, ale také nám to v konzoli zobrazí pěknou chybovou zprávu:

Proč tomu tak je? Odpověď zní, že index pole není stabilní. Pokud se změní pořadí prvků, změní se i jednotlivé klíče a máme problém. Pokud React se setká se situací, kdy bylo pořadí v seznamu prvků změněno, bude se je stále snažit porovnávat podle klíčů, což znamená, že každé porovnání skončí opětovným sestavením prvku a v důsledku toho bude celý seznam sestaven znovu od začátku. Kromě toho se můžeme setkat s některými neočekávanými problémy, jako je aktualizace stavu komponenty pro prvky jako nekontrolované vstupy a další kouzelné těžko laditelné problémy.

Výjimky

Vraťme se k indexu pole. Pokud jej použijeme jako Klíč React může být tak problematické, proč React bude používat ve výchozím nastavení? Existuje nějaký případ použití, kdy je to v pořádku? Odpověď zní ano, takovým případem použití jsou statické seznamy. Pokud jste si jisti, že seznam, který vykreslujete, nikdy nezmění své pořadí, je bezpečné použít index pole, ale pamatujte, že pokud máte nějaké jedinečné identifikátory, je stále lepší použít místo nich. Můžete si také všimnout, že předání indexů jako klíčů způsobí, že se funkce React zmizí chybová zpráva a současně se zobrazí chyba nebo varování u některých externích linterů. To je způsobeno tím, že explicitní použití indexů jako klíčů je považováno za špatnou praxi a některé lintery to mohou považovat za chybu, zatímco React sám to považuje za situaci "vývojáři vědí, co dělají" - takže to nedělejte, pokud opravdu nevíte, co děláte. Několik příkladů, kdy může být použití této výjimky v pořádku, je rozbalovací seznam se statickým seznamem tlačítek nebo zobrazení seznamu prvků s informacemi o adrese vaší společnosti.

Alternativa ke klíči založenému na datové sadě

Řekněme, že žádná z výše uvedených možností pro nás nepřipadá v úvahu. Musíme například zobrazit seznam prvků založený na poli řetězců, které lze duplikovat, ale lze je také přeuspořádat. V tomto případě nemůžeme použít žádný z řetězců, protože nejsou unikátní (to může způsobit i kouzelné chyby), a index pole není dost dobrý, protože budeme měnit pořadí prvků. Poslední věcí, na kterou se můžeme v podobných situacích spolehnout, je použití některých externích identifikátorů. Nezapomeňte, že musí být stabilní, takže nemůžeme jen tak sáhnout po Math.random(). Existují některé balíčky NPM, které můžeme v takových případech použít, např. "uuid" balíček. Takové nástroje nám mohou pomoci udržet klíče našich seznamů stabilní a jedinečné, i když v našem souboru dat nemůžeme najít správné identifikátory. Nejprve bychom měli zvážit použití databázového ID a indexu pole (pokud je to možné), abychom minimalizovali počet balíčků používaných naším projekt.

Na závěr

  • Každý prvek v seznamu React prvky by měly mít jedinečný, stabilní atribut klíče,
  • Klíče React se používají k urychlení Proces sesouhlasení a zabránit zbytečnému obnovování prvků v seznamech,
  • Nejlepším zdrojem klíčů je jedinečný identifikátor při zadávání dat (například z databáze),
  • Jako klíč můžete použít index pole, ale pouze pro statický seznam, jehož pořadí se nebude měnit,
  • Pokud neexistuje jiný způsob, jak získat stabilní a jedinečné klíče, zvažte použití externích poskytovatelů ID, například balíčku "uuid".

Přečtěte si více:

Proč byste (pravděpodobně) měli používat Typescript

Jak nezničit projekt špatnými kódovacími postupy?

Strategie načítání dat v NextJS

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

    cs_CZCzech
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech