window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster υπάρχει ήδη') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() React Κλειδιά, ναι! Τα χρειάζεστε, αλλά γιατί ακριβώς; - The Codest
The Codest
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Βιομηχανίες
    • Fintech & Τραπεζική
    • E-commerce
    • Adtech
    • Healthtech
    • Κατασκευή
    • Εφοδιαστική
    • Αυτοκίνητο
    • IOT
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
Πίσω βέλος GO BACK
2021-10-12
Ανάπτυξη λογισμικού

React Κλειδιά, ναι! Τα χρειάζεστε, αλλά γιατί ακριβώς;

Przemysław Adamczyk

Ο μετασχηματισμός ενός πίνακα σε μια λίστα στοιχείων με το React είναι αρκετά απλός, βασικά το μόνο που χρειάζεται να κάνετε είναι να αντιστοιχίσετε τον πίνακα και να επιστρέψετε το κατάλληλο στοιχείο για κάθε στοιχείο του πίνακα.

Υπάρχει επίσης ένα ακόμη πράγμα που πρέπει να θυμάστε και αυτό είναι η React Κλειδί χαρακτηριστικό, κάθε στοιχείο της αποδιδόμενης λίστας πρέπει να το έχει. Αυτή η έννοια είναι ένα από τα πρώτα πράγματα που μαθαίνει κάθε προγραμματιστής front-end για το React στην αρχή του ταξιδιού τους. Τώρα ας ψάξουμε λίγο βαθύτερα για να διερευνήσουμε γιατί συμβαίνει αυτό και πότε μπορούμε να κάνουμε κάποιες συντομεύσεις.

Γιατί χρειαζόμαστε αυτό το βασικό χαρακτηριστικό;

Η απλούστερη απάντηση εδώ θα ήταν "για τη βελτιστοποίηση των επανεκτελέσεων", αλλά η πιο ολοκληρωμένη πρέπει τουλάχιστον να αναφέρει την έννοια της React Συμφιλίωση. Αυτή είναι η διαδικασία της εύρεσης του τρόπου ενημέρωσης του UI με τον πιο αποτελεσματικό τρόπο. Για να γίνει αυτό γρήγορα, React πρέπει να αποφασίσει ποια τμήματα του δέντρου των στοιχείων πρέπει να ενημερωθούν και ποια όχι. Το θέμα είναι ότι μπορεί να υπάρχουν πολλά στοιχεία στο DOM και η σύγκριση του καθενός από αυτά για να αποφασιστεί ποιο πρέπει να ενημερωθεί είναι αρκετά δαπανηρή. Για να το βελτιστοποιήσετε αυτό, React υλοποιεί τον αλγόριθμο diffing, ο οποίος βασίζεται σε δύο υποθέσεις:

  1. Δύο διαφορετικοί τύποι στοιχείων δεν θα είναι ποτέ ίδιοι - γι' αυτό ξαναδώστε τα.
  2. Οι προγραμματιστές μπορούν να βοηθήσουν χειροκίνητα στη βελτιστοποίηση αυτής της διαδικασίας μέσω βασικών χαρακτηριστικών, ώστε τα στοιχεία, ακόμη και αν η σειρά τους έχει αλλάξει, να μπορούν να εντοπιστούν και να συγκριθούν ταχύτερα.

Με βάση αυτό, μπορούμε να συμπεράνουμε ότι κάθε Κλειδί React θα πρέπει επίσης να είναι μοναδικό (εντός του καταλόγου των στοιχείων, όχι παγκοσμίως) και σταθερό (δεν θα πρέπει να αλλάζει). Αλλά τι μπορεί να συμβεί όταν δεν είναι ταυτοποιημένα;

Μοναδικότητα, σταθερότητα και δείκτης συστοιχίας

Όπως αναφέραμε προηγουμένως, Πλήκτρα React θα πρέπει να είναι σταθερό και μοναδικό. Ο ευκολότερος τρόπος για να το πετύχετε αυτό είναι να χρησιμοποιήσετε ένα μοναδικό αναγνωριστικό (για παράδειγμα από μια βάση δεδομένων) και να το περάσετε σε κάθε στοιχείο κατά την αντιστοίχιση ενός πίνακα, εύκολα. Τι γίνεται όμως με τις περιπτώσεις που δεν έχουμε ένα αναγνωριστικό, ένα όνομα ή άλλα μοναδικά αναγνωριστικά για να τα περάσουμε σε κάθε στοιχείο; Λοιπόν, αν δεν περάσουμε τίποτα ως κλειδί, React θα πάρει τον τρέχοντα δείκτη του πίνακα από προεπιλογή (αφού είναι μοναδικός μέσα στη λίστα) για να το χειριστεί για εμάς, αλλά θα μας δώσει επίσης ένα ωραίο μήνυμα σφάλματος στην κονσόλα:

Γιατί συμβαίνει αυτό; Η απάντηση είναι ότι ο δείκτης του πίνακα δεν είναι σταθερός. Εάν αλλάξει η σειρά των στοιχείων, κάθε ένα από τα κλειδιά θα αλλάξει και έχουμε πρόβλημα. Εάν React συναντά μια κατάσταση όπου η σειρά σε μια λίστα στοιχείων άλλαξε, θα εξακολουθεί να προσπαθεί να τα συγκρίνει με βάση τα κλειδιά, πράγμα που σημαίνει ότι κάθε σύγκριση θα καταλήγει στην επαναδημιουργία ενός στοιχείου και, ως αποτέλεσμα, ολόκληρη η λίστα θα ξαναδημιουργηθεί από την αρχή. Εκτός από αυτό, μπορεί να αντιμετωπίσουμε κάποια απροσδόκητα προβλήματα, όπως ενημερώσεις κατάστασης στοιχείων για στοιχεία όπως μη ελεγχόμενες εισόδους και άλλα μαγικά προβλήματα που είναι δύσκολο να αποσφαλματωθούν.

Εξαιρέσεις

Ας επιστρέψουμε στον δείκτη του πίνακα. Αν το χρησιμοποιείτε ως Κλειδί React μπορεί να είναι τόσο προβληματική, γιατί React θα το χρησιμοποιεί από προεπιλογή; Υπάρχει κάποια περίπτωση χρήσης στην οποία είναι εντάξει να το κάνετε; Η απάντηση είναι ναι, η περίπτωση χρήσης είναι οι στατικές λίστες. Αν είστε σίγουροι ότι μια λίστα που αποδίδετε δεν θα αλλάξει ποτέ τη σειρά της, είναι ασφαλές να χρησιμοποιήσετε το array index, αλλά να θυμάστε, αν έχετε κάποια μοναδικά αναγνωριστικά, εξακολουθεί να είναι καλύτερο να τα χρησιμοποιήσετε αντί γι' αυτά. Μπορείτε επίσης να παρατηρήσετε ότι περνώντας δείκτες ως κλειδιά θα κάνει το React εξαφανίζεται το μήνυμα σφάλματος, ενώ ταυτόχρονα ενεργοποιεί ορισμένους από τους εξωτερικούς λιντέρ για να εμφανίσουν ένα σφάλμα ή μια προειδοποίηση. Αυτό οφείλεται στο γεγονός ότι η ρητή χρήση δεικτών ως κλειδιά θεωρείται κακή πρακτική και ορισμένοι λιντερς μπορεί να το αντιμετωπίσουν ως σφάλμα, ενώ React το θεωρεί ως μια κατάσταση "οι προγραμματιστές ξέρουν τι κάνουν" - οπότε μην το κάνετε αυτό αν δεν ξέρετε πραγματικά τι κάνετε. Μερικά παραδείγματα για το πότε μπορεί να είναι εντάξει η χρήση αυτής της εξαίρεσης θα ήταν ένα dropdown με μια στατική λίστα κουμπιών ή η εμφάνιση μιας λίστας στοιχείων με πληροφορίες για τη διεύθυνση της εταιρείας σας.

Μια εναλλακτική λύση σε ένα κλειδί με βάση το σύνολο δεδομένων

Ας υποθέσουμε ότι κανένα από τα παραπάνω δεν αποτελεί επιλογή για εμάς. Για παράδειγμα, πρέπει να εμφανίσουμε μια λίστα στοιχείων με βάση τον πίνακα συμβολοσειρών, η οποία μπορεί να είναι διπλή, αλλά μπορεί επίσης να είναι και αναδιατεταγμένη. Σε αυτή την περίπτωση, δεν μπορούμε να χρησιμοποιήσουμε καμία από τις συμβολοσειρές επειδή δεν είναι μοναδικές (αυτό μπορεί να προκαλέσει και κάποια μαγικά σφάλματα) και ο δείκτης του πίνακα δεν είναι αρκετά καλός επειδή θα αλλάξουμε τη σειρά των στοιχείων. Το τελευταίο πράγμα στο οποίο μπορούμε να βασιστούμε σε τέτοιες περιπτώσεις είναι η χρήση κάποιων εξωτερικών αναγνωριστικών. Θυμηθείτε ότι πρέπει να είναι σταθερό, οπότε δεν μπορούμε να χρησιμοποιήσουμε απλά την Math.random(). Υπάρχουν κάποια πακέτα NPM που μπορούμε να χρησιμοποιήσουμε σε τέτοιες περιπτώσεις, για παράδειγμα το "uuid" πακέτο. Τέτοια εργαλεία μπορούν να μας βοηθήσουν να διατηρήσουμε τα κλειδιά της λίστας μας σταθερά και μοναδικά, ακόμη και όταν δεν μπορούμε να βρούμε κατάλληλα αναγνωριστικά μέσα στο σύνολο των δεδομένων μας. Θα πρέπει να εξετάσουμε πρώτα τη χρήση του αναγνωριστικού της βάσης δεδομένων και του δείκτη συστοιχίας (αν είναι δυνατόν), για να ελαχιστοποιήσουμε τον αριθμό των πακέτων που χρησιμοποιούνται από το έργο.

Για να το ολοκληρώσουμε

  • Κάθε στοιχείο της λίστας των React στοιχεία πρέπει να έχουν ένα μοναδικό, σταθερό χαρακτηριστικό κλειδί,
  • Πλήκτρα React χρησιμοποιούνται για την επιτάχυνση της Διαδικασία συμφιλίωσης και να αποφεύγεται η περιττή αναδόμηση των στοιχείων στις λίστες,
  • Η καλύτερη πηγή για τα κλειδιά είναι το μοναδικό αναγνωριστικό εισαγωγής δεδομένων (για παράδειγμα, από τη βάση δεδομένων),
  • Μπορείτε να χρησιμοποιήσετε τον δείκτη του πίνακα ως κλειδί, αλλά μόνο για μια στατική λίστα της οποίας η σειρά δεν θα αλλάξει,
  • Αν δεν υπάρχει άλλος τρόπος να αποκτήσετε σταθερά και μοναδικά κλειδιά, σκεφτείτε να χρησιμοποιήσετε κάποιους εξωτερικούς παρόχους αναγνωριστικών, για παράδειγμα το πακέτο "uuid".

Διαβάστε περισσότερα:

Γιατί θα πρέπει (πιθανώς) να χρησιμοποιήσετε την Typescript

Πώς να μην σκοτώσετε ένα έργο με κακές πρακτικές κωδικοποίησης;

Στρατηγικές άντλησης δεδομένων στο NextJS

Σχετικά άρθρα

Ανάπτυξη λογισμικού

Κατασκευάστε μελλοντικά ασφαλείς εφαρμογές Web: γνώσεις από την ομάδα εμπειρογνωμόνων του The Codest

Ανακαλύψτε πώς η The Codest υπερέχει στη δημιουργία κλιμακούμενων, διαδραστικών εφαρμογών ιστού με τεχνολογίες αιχμής, παρέχοντας απρόσκοπτη εμπειρία χρήστη σε όλες τις πλατφόρμες. Μάθετε πώς η τεχνογνωσία μας οδηγεί στον ψηφιακό μετασχηματισμό και την επιχειρηματική...

THECODEST
Ανάπτυξη λογισμικού

Top 10 εταιρείες ανάπτυξης λογισμικού με έδρα τη Λετονία

Μάθετε για τις κορυφαίες εταιρείες ανάπτυξης λογισμικού της Λετονίας και τις καινοτόμες λύσεις τους στο τελευταίο μας άρθρο. Ανακαλύψτε πώς αυτοί οι τεχνολογικοί ηγέτες μπορούν να βοηθήσουν στην ανύψωση της επιχείρησής σας.

thecodest
Λύσεις Enterprise & Scaleups

Βασικά στοιχεία ανάπτυξης λογισμικού Java: Α Guide to Outsourcing Successfully (Οδηγός για την επιτυχή εξωτερική ανάθεση)

Εξερευνήστε αυτόν τον βασικό οδηγό για την επιτυχή ανάπτυξη λογισμικού outsourcing Java για να αυξήσετε την αποδοτικότητα, να αποκτήσετε πρόσβαση στην τεχνογνωσία και να οδηγήσετε την επιτυχία των έργων με The Codest.

thecodest
Ανάπτυξη λογισμικού

Ο απόλυτος οδηγός για το Outsourcing στην Πολωνία

Η έξαρση της outsourcing στην Πολωνία οφείλεται στις οικονομικές, εκπαιδευτικές και τεχνολογικές εξελίξεις, που ευνοούν την ανάπτυξη της πληροφορικής και το φιλικό προς τις επιχειρήσεις κλίμα.

TheCodest
Λύσεις Enterprise & Scaleups

Ο πλήρης οδηγός εργαλείων και τεχνικών ελέγχου πληροφορικής

Οι έλεγχοι ΤΠ διασφαλίζουν ασφαλή, αποτελεσματικά και συμβατά συστήματα. Μάθετε περισσότερα για τη σημασία τους διαβάζοντας ολόκληρο το άρθρο.

The Codest
Jakub Jakubowicz CTO & Συνιδρυτής

Εγγραφείτε στη βάση γνώσεών μας και μείνετε ενήμεροι για την τεχνογνωσία από τον τομέα της πληροφορικής.

    Σχετικά με εμάς

    The Codest - Διεθνής εταιρεία ανάπτυξης λογισμικού με κέντρα τεχνολογίας στην Πολωνία.

    Ηνωμένο Βασίλειο - Έδρα

    • Γραφείο 303B, 182-184 High Street North E6 2JA
      Λονδίνο, Αγγλία

    Πολωνία - Τοπικοί κόμβοι τεχνολογίας

    • Πάρκο γραφείων Fabryczna, Aleja
      Pokoju 18, 31-564 Κρακοβία
    • Πρεσβεία του εγκεφάλου, Konstruktorska
      11, 02-673 Βαρσοβία, Πολωνία

      The Codest

    • Αρχική σελίδα
    • Σχετικά με εμάς
    • Υπηρεσίες
    • Case Studies
    • Μάθετε πώς
    • Καριέρα
    • Λεξικό

      Υπηρεσίες

    • Συμβουλευτική
    • Ανάπτυξη λογισμικού
    • Backend Ανάπτυξη
    • Ανάπτυξη Frontend
    • Staff Augmentation
    • Backend Developers
    • Μηχανικοί cloud
    • Μηχανικοί δεδομένων
    • Άλλα
    • Μηχανικοί QA

      Πόροι

    • Γεγονότα και μύθοι σχετικά με τη συνεργασία με εξωτερικό συνεργάτη ανάπτυξης λογισμικού
    • Από τις ΗΠΑ στην Ευρώπη: Γιατί οι αμερικανικές νεοσύστατες επιχειρήσεις αποφασίζουν να μετεγκατασταθούν στην Ευρώπη
    • Σύγκριση υπεράκτιων κόμβων ανάπτυξης τεχνολογίας: Ευρώπη (Πολωνία), ASEAN (Φιλιππίνες), Ευρασία (Τουρκία)
    • Ποιες είναι οι κορυφαίες προκλήσεις των CTOs και των CIOs;
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Πνευματικά δικαιώματα © 2025 από The Codest. Όλα τα δικαιώματα διατηρούνται.

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