window.pipedriveLeadboosterConfig = { basis: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versie: 2, } ;(functie () { var w = venster als (w.LeadBooster) { console.warn('LeadBooster bestaat al') } anders { w.LeadBooster = { q: [], on: functie (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: functie (n) { this.q.push({ t: 't', n: n }) }, } } })() React sleutels, ja! Je hebt ze nodig, maar waarom precies? - The Codest
The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2021-10-12
Software Ontwikkeling

React sleutels, ja! Je hebt ze nodig, maar waarom precies?

Przemysław Adamczyk

Het transformeren van een array naar een lijst van elementen met React is vrij eenvoudig. Eigenlijk hoef je alleen maar de array in kaart te brengen en voor elk array-item het juiste element terug te geven.

Er is nog één ding waar je aan moet denken en dat is de React Sleutel attribuut, moet elk element van de gerenderde lijst dit attribuut hebben. Dit concept is een van de eerste dingen die elke front-end ontwikkelaar leert over React aan het begin van hun reis. Laten we nu eens wat dieper graven om te onderzoeken waarom dit het geval is en wanneer we wat kortere wegen kunnen nemen.

Waarom hebben we deze sleutelattribuut nodig?

Het eenvoudigste antwoord hier zou zijn "om re-renders te optimaliseren", maar het meer volledige antwoord moet op zijn minst het concept van React Afstemming. Dit is het proces van uitzoeken hoe de UI op de meest efficiënte manier kan worden bijgewerkt. Om dat snel te doen, React moet beslissen welke delen van de boom van elementen bijgewerkt moeten worden en welke niet. Het punt is dat er veel elementen in het DOM kunnen zijn en het vergelijken van elk van hen om te beslissen welke moet worden bijgewerkt is behoorlijk duur. Om dit te optimaliseren, React implementeert het diffing-algoritme dat gebaseerd is op twee aannames:

  1. Twee verschillende soorten elementen zullen nooit hetzelfde zijn - dus geef ze opnieuw weer.
  2. Ontwikkelaars kunnen handmatig helpen dat proces te optimaliseren via sleutelattributen, zodat de elementen, zelfs als hun volgorde is veranderd, sneller kunnen worden gelokaliseerd en vergeleken.

Op basis daarvan kunnen we concluderen dat elke React sleutel moeten ook uniek zijn (binnen de lijst van elementen, niet globaal) en stabiel (mogen niet veranderen). Maar wat kan er gebeuren als ze niet tat zijn?

Uniciteit, stabiliteit en array-index

Zoals we al eerder zeiden, React toetsen moet stabiel en uniek zijn. De eenvoudigste manier om dit te bereiken is door een unieke ID te gebruiken (bijvoorbeeld uit een database) en deze door te geven aan elk element bij het mappen van een array, eenvoudig. Maar hoe zit het met situaties waarin we geen ID, naam of andere unieke identifiers hebben om aan elk element door te geven? Nou, als we niets doorgeven als sleutel, React zal standaard de huidige array-index nemen (aangezien deze uniek is binnen die lijst) om het voor ons af te handelen, maar het zal ons ook een mooie foutmelding geven in de console:

Waarom is dat het geval? Het antwoord is dat de array-index niet stabiel is. Als de volgorde van de elementen verandert, verandert elk van de sleutels en hebben we een probleem. Als React In een situatie waar de volgorde in een lijst van elementen werd gewijzigd, zal het nog steeds proberen om ze te vergelijken aan de hand van de sleutels, wat betekent dat elke vergelijking zal eindigen in het opnieuw opbouwen van een component en, als gevolg daarvan, de hele lijst opnieuw zal worden opgebouwd. Bovendien kunnen we enkele onverwachte problemen tegenkomen, zoals component status updates voor elementen als ongecontroleerde ingangen en andere magische moeilijk te debuggen problemen.

Uitzonderingen

Laten we teruggaan naar de array-index. Als je het gebruikt als een React sleutel zo problematisch kan zijn, waarom React standaard zal gebruiken? Is er een use-case waarbij dat wel mag? Het antwoord is ja, de use-case hiervoor is statische lijsten. Als je zeker weet dat een lijst die je rendert nooit van volgorde zal veranderen, is het veilig om array-index te gebruiken, maar onthoud dat als je unieke identifiers hebt, het nog steeds beter is om die in plaats daarvan te gebruiken. Je kunt ook opmerken dat het doorgeven van indexen als sleutels de React foutmelding verdwijnen, terwijl tegelijkertijd sommige externe linters een fout of waarschuwing weergeven. Dit is te wijten aan het feit dat het expliciete gebruik van indexen als sleutels wordt beschouwd als een slechte gewoonte en sommige linters kunnen dit behandelen als een fout, terwijl React zelf beschouwt het als een "de ontwikkelaars weten wat ze doen" situatie - dus doe dat niet tenzij je echt weet wat je doet. Een paar voorbeelden van wanneer het in orde kan zijn om die uitzondering te gebruiken, zijn een dropdown met een statische lijst met knoppen of het weergeven van een lijst met elementen met de adresgegevens van je bedrijf.

Een alternatief voor een dataset-gebaseerde sleutel

Laten we zeggen dat geen van de bovenstaande opties een optie voor ons is. We moeten bijvoorbeeld een lijst met elementen weergeven op basis van de array van strings die gedupliceerd kan worden, maar ook opnieuw geordend kan worden. In dit geval kunnen we geen van de strings gebruiken omdat ze niet uniek zijn (dit kan ook een aantal magische bugs veroorzaken) en de array-index is niet goed genoeg omdat we de volgorde van de elementen zullen veranderen. Het laatste waar we op kunnen vertrouwen in dit soort situaties is het gebruik van externe identifiers. Onthoud dat het stabiel moet zijn, dus we kunnen niet zomaar Math.random() gebruiken. Er zijn enkele NPM-pakketten die we in zulke gevallen kunnen gebruiken, bijvoorbeeld de "uuid" pakket. Hulpmiddelen als deze kunnen ons helpen om onze lijstsleutels stabiel en uniek te houden, zelfs als we niet de juiste identifiers in onze gegevensset kunnen vinden. We moeten overwegen om (indien mogelijk) eerst database-ID en array-index te gebruiken om het aantal pakketten dat gebruikt wordt door onze project.

Om het af te ronden

  • Elk element in de lijst van React elementen moeten een uniek, stabiel sleuteleigenschap hebben,
  • React toetsen worden gebruikt om de Afstemmingsproces en onnodig heropbouwen van elementen op de lijsten voorkomen,
  • De beste bron voor sleutels is de unieke ID van gegevensinvoer (bijvoorbeeld uit de database),
  • Je kunt de array-index als sleutel gebruiken, maar alleen voor een statische lijst waarvan de volgorde niet verandert,
  • Als er geen andere manier is om stabiele en unieke sleutels te krijgen, overweeg dan om een aantal externe ID-providers te gebruiken, bijvoorbeeld het pakket "uuid".

Lees meer:

Waarom je (waarschijnlijk) Typescript zou moeten gebruiken

Hoe help je een project niet om zeep met slechte codeerpraktijken?

Strategieën voor het ophalen van gegevens in NextJS

Verwante artikelen

Software Ontwikkeling

Bouw Toekomstbestendige Web Apps: Inzichten van The Codest's Expert Team

Ontdek hoe The Codest uitblinkt in het creëren van schaalbare, interactieve webapplicaties met geavanceerde technologieën, het leveren van naadloze gebruikerservaringen op alle platforms. Ontdek hoe onze expertise digitale transformatie en business...

DE BESTE
Software Ontwikkeling

Top 10 in Letland gevestigde bedrijven voor softwareontwikkeling

Lees meer over de beste softwareontwikkelingsbedrijven van Letland en hun innovatieve oplossingen in ons nieuwste artikel. Ontdek hoe deze technologieleiders uw bedrijf kunnen helpen verbeteren.

thecodest
Oplossingen voor ondernemingen en schaalvergroting

Essentiële Java-softwareontwikkeling: Een gids voor succesvol uitbesteden

Verken deze essentiële gids over succesvolle outsourcing Java-softwareontwikkeling om de efficiëntie te verbeteren, toegang te krijgen tot expertise en projectsucces te stimuleren met The Codest.

thecodest
Software Ontwikkeling

De ultieme gids voor outsourcing in Polen

De sterke groei van outsourcing in Polen wordt gedreven door economische, educatieve en technologische vooruitgang, die IT-groei en een bedrijfsvriendelijk klimaat stimuleert.

DeCodest
Oplossingen voor ondernemingen en schaalvergroting

De complete gids voor IT-auditmiddelen en -technieken

IT-audits zorgen voor veilige, efficiënte en compliant systemen. Lees het volledige artikel om meer te weten te komen over het belang ervan.

The Codest
Jakub Jakubowicz CTO & medeoprichter

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

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