WebHU - Programozási kérdések és válaszok

Sorozatos azonosítók generálása a ReactJS kulcsokhoz

A React megköveteli, hogy egy egyedi key attribútum legyen a tömb elemeinél. A React docs azt javasolja, hogy használjon egy id jelet az adataiból. Ha nincs id, akkor a tömbindexet "utolsó megoldásként" használhatja, azzal a figyelmeztetéssel, hogy az index használata teljesítményproblémákat okozhat, amikor az elemeket újra lehet rendezni. Bosszantó problémáim voltak akkor is, amikor több forrástömbből és több .map()-hívásból elemtömböt építettem fel, mindegyik különböző átalakításokkal, ebben az esetben a tömb indexei amúgy sem lesznek egyediek.

Elkezdtem bedobni a következő kazánt az alkatrészeimbe:

constructor(props) {
    super(props);
    this.getId = this.getId.bind(this);
    this.id = 0;
}

getId() {
    return this.id++;
}

ami így használható:

render() {
    const items = this.props.greetings.map(text => ({
        <li key={this.getId()}>{text}</li>
    }));

    return (
        <ul>
          {items}
        </ul>
    );
}

Ez egyszerű, gyors, és nem okoz olyan problémákat, mint a tömbindex használata, de nem tudom, van-e probléma ezzel a megközelítéssel vagy jobb alternatívákkal, amelyeket figyelmen kívül hagyok. Ez rossz gyakorlat? Vannak más egyszerű módszerek a key-ek generálására, amelyek nem okoznak problémákat a tömbindexszel?

21.10.2017

  • A key propnak nem kell egész számnak lennie. Bármilyen karakterláncot átadhat a kulcsnak. Tehát ha a text kelléked egyedülálló a többi testvérkomponens között, akkor ezt egyszerűen átadhatod key kellékként. 22.10.2017
  • @bennygenel ez egy kitalált példa volt. Feltételezheti, hogy a text nem garantáltan egyedi. 22.10.2017

Válaszok:


1

Ezt mondják a kulcsokról a Reconciliation dokumentumai

A gyakorlatban általában nem nehéz megtalálni a kulcsot. A megjeleníteni kívánt elemnek már lehet egyedi azonosítója, így a kulcs csak az Ön adataiból származhat. Ha nem ez a helyzet, új azonosító tulajdonságot adhat a modellhez, vagy kivonatolja a tartalom egyes részeit kulcs létrehozásához. A kulcsnak csak a testvérei között kell egyedinek lennie, nem pedig globálisan. Végső megoldásként kulcsként átadhatja a tömbben lévő elem indexét. Ez jól működhet, ha a tételeket soha nem rendezik újra, de az újrarendelések lassúak lesznek.

Tehát úgy gondolom, hogy a javasolt megközelítést követi.

22.10.2017
  • Úgy tűnik, az én megközelítésemben nem okoznak problémákat a lassú átrendezéssel, igaz? Vajon miért nem ajánlanak ilyesmit a dokik... Azt hiszem, az egyetlen hátránya az egész bolondozás, amikor nem sokat törődik a teljesítmény, amit nehéz megindokolni... 23.10.2017
  • Nem, biztonságban van a lassú átrendezéstől, mivel kifejezetten létrehozza az azonosítókat. A dokumentumok azt mondják, hogy végső esetben kulcsként kell használni a tömb indexeit. Nézze meg az egyik olyan kérdést, amellyel találkoztam, és megmutatja, mi történhet. stackoverflow.com/questions/46477711/ 23.10.2017
  • Ezenkívül, hogy megkerülje a kazánt, létrehozhat egy HOC-t, amely egy azonosítót ad hozzá bármely olyan összetevőhöz, amelyet esetleg szeretne használni egy tömbben. Csak egy gondolat. 23.10.2017
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..