Middle
Ποιοι κανόνες υπάρχουν για τη συγγραφή hooks στο React;
sobes.tech AI
Απάντηση από AI
- Καλείτε τα hooks μόνο στο ανώτερο επίπεδο των λειτουργικών συστατικών ή μέσα σε άλλα προσαρμοσμένα hooks. Μην καλείτε hooks σε βρόχους, συνθήκες ή εμφωλευμένες λειτουργίες.
- Καλείτε τα hooks μόνο μέσα σε React λειτουργικά συστατικά. Μην τα καλείτε σε κανονικές λειτουργίες JavaScript ή σε συστατικά κλάσεων.
- Η χρήση του
useCallbackγια την απομνημόνευση λειτουργιών και τουuseMemoγια την απομνημόνευση υπολογισμών βοηθά στη βελτιστοποίηση της απόδοσης. - Χρησιμοποιήστε το
useEffectγια παρενέργειες (φόρτωση δεδομένων, συνδρομές κ.λπ.), καθορίζοντας έναν πίνακα εξαρτήσεων για τον έλεγχο της εκτέλεσης του αποτελέσματος. - Τηρείτε τη σειρά κλήσης των hooks σε κάθε ανανέωση του συστατικού. Το React βασίζεται σε αυτή τη σειρά για να συνδέσει σωστά την κατάσταση και τα αποτελέσματα.
- Χρησιμοποιήστε σταθερές εξαρτήσεις στους πίνακες εξαρτήσεων του
useEffect,useCallback,useMemo. Μην περνάτε αντικείμενα ή λειτουργίες που δημιουργούνται σε κάθε ανανέωση χωρίς ανάγκη. - Δημιουργήστε προσαρμοσμένα hooks για την επανάχρηση της λογικής κατάστασης μεταξύ συστατικών. Τα ονόματα των προσαρμοσμένων hooks πρέπει να αρχίζουν με
use.
// Σωστό παράδειγμα: καλώντας hooks στο ανώτερο επίπεδο
function MyComponent() {
const [count, setCount] = useState(0); // Στο ανώτερο επίπεδο
useEffect(() => { // Στο ανώτερο επίπεδο
document.title = `Έχετε πατήσει ${count} φορές`;
}, [count]); // Πίνακας εξαρτήσεων
const handleClick = useCallback(() => { // Στο ανώτερο επίπεδο
setCount(c => c + 1);
}, []); // Μνημονευμένη λειτουργία
return (
<div>
<p>Έχετε πατήσει {count} φορές</p>
<button onClick={handleClick}>
Πάτα με
</button>
</div>
);
}
// Λάθος παράδειγμα: καλώντας ένα hook σε συνθήκη
// function MyComponentWithBadHook() {
// if (someCondition) {
// const [count, setCount] = useState(0); // ΛΑΘΟΣ: κλήση σε συνθήκη
// }
// // ...
// }
// Λάθος παράδειγμα: καλώντας ένα hook σε βρόχο
// function MyComponentWithAnotherBadHook() {
// for (let i = 0; i < 5; i++) {
// const [value, setValue] = useState(i); // ΛΑΘΟΣ: κλήση σε βρόχο
// }
// // ...
// }