Το στοιχείο Text στο React Native είναι ο μόνος τρόπος εμφάνισης κειμένου στην οθόνη, σε αντίθεση με τον ιστό, όπου χρησιμοποιούνται διαφορετικές ετικέτες (p, span, h1-h6). Το Text υποστηρίζει ένθεση για κλιμακωτή κληρονομικότητα στυλ, επεξεργασία συμβάντων αφής και αυτόματη αναδίπλωση γραμμών. Σύμφωνα με το React Native Docs, 2024, το Text είναι το δεύτερο πιο συχνά χρησιμοποιούμενο στοιχείο μετά το View. Το στοιχείο αποδίδεται σε εγγενές UILabel στο iOS και TextView στο Android, εξασφαλίζοντας σωστή λειτουργία γραμματοσειρών και προσβασιμότητας.
Κύρια σημεία
Text είναι ένα στοιχείο React Native για εμφάνιση περιεχομένου κειμένου. Σε αντίθεση με την ανάπτυξη ιστού, όπου υπάρχουν πολλές σημασιολογικές ετικέτες για κείμενο, στο React Native όλα τα στοιχεία κειμένου δημιουργούνται μέσω του Text. Το στοιχείο μπορεί να εμφανίσει τόσο απλό κείμενο όσο και περίπλοκες δομές με ένθετα Text και στυλιζαρισμένα τμήματα.
Το Text χειρίζεται αυτόματα την αναδίπλωση γραμμών, ελέγχει την οικογένεια γραμματοσειράς, το μέγεθος, το χρώμα και τη στοίχιση. Το στοιχείο υποστηρίζει συμβάντα αφής (onPress), επιτρέποντας τη δημιουργία κλικ άνω συνδέσμων χωρίς επιπλέον περιτυλίγματα. Σημαντικός περιορισμός: το Text δεν μπορεί να τοποθετηθεί απευθείας σε View — μόνο σε άλλα στοιχεία Text ή ως άμεσο περιεχόμενο.
Σύμφωνα με το React Native Nested Text, 2024, τα ένθετα στοιχεία Text κληρονομούν στυλ από τον γονέα. Αυτό επιτρέπει τον καθορισμό βασικού στυλ στο ανώτερο επίπεδο και την παράκαμψη μεμονωμένων ιδιοτήτων για συγκεκριμένα τμήματα — παρόμοια με τη λειτουργία του span με CSS στον ιστό.
Το στοιχείο Text παρέχει ένα σύνολο props για διαχείριση εμφάνισης, συμπεριφοράς και προσβασιμότητας. Βασικές κατηγορίες: props στυλ (γραμματοσειρά, μέγεθος, χρώμα, στοίχιση), props εμφάνισης (numberOfLines, lineBreakMode) και διαδραστικά (onPress, onLongPress).
numberOfLines περιορίζει τον αριθμό των εμφανιζόμενων γραμμών, προσθέτοντας αποσιωπητικά στο τέλος. ellipsizeMode ελέγχει τη θέση των αποσιωπητικών (head, middle, tail, clip). adjustsFontSizeToFit μειώνει αυτόματα το μέγεθος γραμματοσειράς ώστε το κείμενο να χωρά στα καθορισμένα όρια. lineBreakMode καθορίζει πώς θα περικοπεί το κείμενο πέρα από το numberOfLines.
Το Text υποστηρίζει onPress και onLongPress για επεξεργασία αφής. Αυτό επιτρέπει τη δημιουργία συνδέσμων κειμένου χωρίς χρήση TouchableOpacity. onTextLayout επιστρέφει πληροφορίες σχετικά με τη θέση του κειμένου μετά την απόδοση — χρήσιμο για κινούμενα σχέδια και τοποθέτηση.
Στο iOS είναι διαθέσιμα disabled (απενεργοποίηση κειμένου), selectable (ενεργοποίηση επιλογής), dataDetectorTypes (αυτόματη αναγνώριση συνδέσμων, τηλεφώνων, διευθύνσεων). Στο Android είναι διαθέσιμα selectable (μέσω textSelectable), includeFontPadding (αφαίρεση περιττών διαστημάτων).
Αν και το Text οπτικά μοιάζει με τις ετικέτες HTML p και span, οι αρχιτεκτονικές διαφορές είναι σημαντικές. Στο React Native λείπει το μοντέλο DOM με σημασιολογικά στοιχεία κειμένου — όλοι οι κόμβοι κειμένου διαχειρίζονται μέσω ενός ενιαίου στοιχείου Text με διαφορετικά props.
| Χαρακτηριστικό | Text (React Native) | p / span (HTML) |
|---|---|---|
| Ένθεση | Text σε Text — κληρονομικότητα στυλ | p δεν μπορεί να περιέχει p· span σε p |
| Προεπιλεγμένο margin | Χωρίς προεπιλεγμένα περιθώρια | p έχει margin-block-start/end |
| Αναδίπλωση γραμμής | Αυτόματη εντός κοντέινερ | p — μπλοκ, span — ενδογραμμικό |
| Υποστήριξη onPress | Ενσωματωμένη υποστήριξη | Απαιτεί πρόσθετο περιτύλιγμα |
| Κληρονομικότητα στυλ | Ναι, από γονικό Text | Ναι, αλληλουχία CSS |
Η βασική διαφορά — κληρονομικότητα στυλ μέσω ένθεσης Text. Αν το εξωτερικό Text έχει fontSize: 18 και color: blue, όλα τα ένθετα Text κληρονομούν αυτά τα στυλ. Οποιαδήποτε ιδιότητα μπορεί να παρακαμφθεί στο εσωτερικό Text ορίζοντας συγκεκριμένη τιμή. Αυτό εξοικονομεί κώδικα και καθιστά τη δομή πιο καθαρή.
Το Text υποστηρίζει τις περισσότερες ιδιότητες CSS για τυπογραφία: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform. Στο React Native, οι γραμματοσειρές συνδέονται σε επίπεδο πλατφόρμας, όχι μέσω @font-face.
Για χρήση προσαρμοσμένων γραμματοσειρών, πρέπει να προστεθούν στο φάκελο assets/fonts και να καθοριστούν στο react-native.config.js. Μετά την ανακατασκευή της εφαρμογής, η γραμματοσειρά γίνεται διαθέσιμη μέσω fontFamily. Το React Native δεν υποστηρίζει άμεσα γραμματοσειρές ιστού (Google Fonts) — απαιτείται λήψη αρχείων .ttf ή .otf.
Ο μηχανισμός κληρονομικότητας στο Text διαφέρει από το CSS. Τα στυλ μεταφέρονται μόνο από Text σε ένθετο Text, αλλά όχι από View σε Text. Αν χρειάζεται να οριστεί γραμματοσειρά για ολόκληρη την εφαρμογή, χρησιμοποιείται το defaultProps του στοιχείου Text ή ένα προσαρμοσμένο στοιχείο-περιτύλιγμα.
<Text style={{ fontSize: 18, color: '#333' }}>
This text is 18px and color #333
<Text style={{ fontWeight: 'bold', color: '#007AFF' }}>
bold and blue
</Text>
back to #333 color
</Text>
Σε αυτό το παράδειγμα, το εξωτερικό Text ορίζει fontSize: 18 και color: #333. Το εσωτερικό Text κληρονομεί το fontSize (18), αλλά παρακάμπτει το fontWeight σε bold και το color σε #007AFF. Το εξωτερικό Text κληρονομεί μόνο τα δικά του στυλ. Αυτή είναι ακριβής αναλογία της λειτουργίας ένθετων span στην HTML.
Ας εξετάσουμε δύο τυπικά σενάρια χρήσης του Text στο React Native: μορφοποίηση κειμένου με ένθεση και δημιουργία κλικ άνω στοιχείου με περιορισμό γραμμών.
Σε αυτό το παράδειγμα, το Text χρησιμοποιείται για εμφάνιση πολύγραμμου κειμένου με επισημασμένα στοιχεία: τίτλος, ημερομηνία και περιεχόμενο με σύνδεσμο.
const NewsCard = ({ title, date, content }) => (
<View style={styles.card}>
<Text style={styles.title}>{title}</Text>
<Text style={styles.date}>{date}</Text>
<Text style={styles.content}>
{content}
{' ' }
<Text
style={styles.link}
onPress={() => Linking.openURL(url)}
>
Read more
</Text>
</Text>
</View>
);
Σε αυτή τη δομή υπάρχουν τρία ανεξάρτητα στοιχεία Text (τίτλος, ημερομηνία, περιεχόμενο), το καθένα με το δικό του στυλ. Μέσα στο Text με περιεχόμενο είναι ένθετο ένα άλλο Text με onPress για τον σύνδεσμο. Αυτό το μοτίβο χρησιμοποιείται για ροές ειδήσεων, ιστολόγια και σχόλια.
Για εμφάνιση προεπισκόπησης κειμένου με αποσιωπητικά χρησιμοποιείται το numberOfLines. Αυτό είναι ένα τυπικό μοτίβο για κάρτες προϊόντων και άρθρα σε λίστες.
<Text
numberOfLines={2}
ellipsizeMode="tail"
style={styles.preview}
>
{longDescription}
</Text>
Η ιδιότητα numberOfLines = 2 περιορίζει το κείμενο σε δύο γραμμές. Αν το κείμενο είναι μεγαλύτερο, το React Native προσθέτει αυτόματα αποσιωπητικά στο τέλος της δεύτερης γραμμής. Η παράμετρος ellipsizeMode: 'tail' υποδεικνύει ότι τα αποσιωπητικά πρέπει να είναι στο τέλος (διαθέσιμα είναι επίσης head, middle, clip).
Συχνές ερωτήσεις
Το React Native χρησιμοποιεί ένα μινιμαλιστικό σύνολο στοιχείων για συμβατότητα μεταξύ πλατφορμών. Αντί για πολλές σημασιολογικές ετικέτες HTML, εφαρμόζεται ένα Text με διάφορα στυλ. Αυτό απλοποιεί την απόδοση και στις δύο πλατφόρμες από μια ενιαία βάση κώδικα.
Ναι, το Text υποστηρίζει onPress και onLongPress για επεξεργασία αφής. Ωστόσο, για κουμπιά με οπτική ανάδραση (φωτισμός πατήματος) είναι καλύτερο να χρησιμοποιείτε TouchableOpacity ή Pressable με Text εντός. Το Text.onPress δεν παρέχει οπτική ένδειξη πατήματος από προεπιλογή.
Το Text αναδιπλώνει αυτόματα μόνο μεγάλες γραμμές εντός του κοντέινερ του. Αν το κείμενο δεν αναδιπλώνεται, ελέγξτε: υπάρχει περιορισμός πλάτους του γονικού View, δεν έχει οριστεί nowrap στα στυλ και το numberOfLines δεν υπερβαίνει τον διαθέσιμο αριθμό γραμμών.
Χρησιμοποιήστε ένθετο Text με fontWeight: 'bold' ή τυλίξτε το κείμενο σε ένα στοιχείο με αυτό το στυλ. Μπορείτε επίσης να εφαρμόσετε fontWeight: '700' ή '800' για πιο έντονη γραφή. Το πάχος εξαρτάται από τη διαθεσιμότητα της αντίστοιχης γραμματοσειράς στη συσκευή.
Όχι, το Text μπορεί να περιέχει μόνο άλλα στοιχεία Text ή συμβολοσειρές. Το Image δεν μπορεί να είναι απόγονος του Text. Για εμφάνιση κειμένου με εικονίδια, χρησιμοποιήστε View με Text και Image ως γειτονικά στοιχεία ή ένα στοιχείο που υποστηρίζει ενσωμάτωση εικόνων.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης