Text-komponenten i React Native är det enda sättet att visa text på skärmen, till skillnad från webben där olika taggar (p, span, h1-h6) används. Text stöder nästling för kaskadärvning av stilar, hantering av beröringshändelser och automatisk radbrytning. Enligt React Native Docs, 2024 är Text den näst mest använda komponenten efter View. Komponenten renderas till inbyggd UILabel på iOS och TextView på Android, vilket säkerställer korrekt funktion av typsnitt och tillgänglighet.
Huvudpunkter
Text är en React Native-komponent för att visa textinnehåll. Till skillnad från webbutveckling, där det finns många semantiska taggar för text, skapas alla textelement i React Native via Text. Komponenten kan visa både enkel text och komplexa strukturer med nästlade Text och stylade fragment.
Text hanterar automatiskt radbrytning, styr teckensnittsfamilj, storlek, färg och justering. Komponenten stöder beröringshändelser (onPress), vilket gör det möjligt att skapa klickbara länkar utan extra omslag. En viktig begränsning: Text kan inte placeras direkt i View — endast i andra Text-komponenter eller som direkt innehåll.
Enligt React Native Nested Text, 2024 ärver nästlade Text-komponenter stilar från föräldern. Detta gör det möjligt att ställa in en basstil på den övre nivån och åsidosätta enskilda egenskaper för specifika fragment — liknande hur span fungerar med CSS på webben.
Text-komponenten erbjuder en uppsättning props för att hantera visning, beteende och tillgänglighet. Huvudkategorier: stilprops (typsnitt, storlek, färg, justering), visningsprops (numberOfLines, lineBreakMode) och interaktiva (onPress, onLongPress).
numberOfLines begränsar antalet visade rader och lägger till ellips i slutet. ellipsizeMode styr ellipsens position (head, middle, tail, clip). adjustsFontSizeToFit minskar automatiskt teckenstorleken så att texten får plats inom angivna gränser. lineBreakMode bestämmer hur text utanför numberOfLines kapas.
Text stöder onPress och onLongPress för att hantera beröringar. Detta gör det möjligt att skapa textlänkar utan att använda TouchableOpacity. onTextLayout returnerar information om textens position efter rendering — användbart för animationer och positionering.
På iOS finns disabled (inaktiverar text), selectable (aktiverar markering), dataDetectorTypes (automatisk igenkänning av länkar, telefoner, adresser). På Android finns selectable (via textSelectable), includeFontPadding (tar bort extra mellanrum).
Även om Text visuellt liknar HTML-taggarna p och span, är de arkitektoniska skillnaderna betydande. I React Native saknas DOM-modellen med semantiska textelement — alla textnoder hanteras via en enda Text-komponent med olika props.
| Egenskap | Text (React Native) | p / span (HTML) |
|---|---|---|
| Nästling | Text i Text — stilärvning | p kan inte innehålla p; span i p |
| Standard margin | Inga standardmarginaler | p har margin-block-start/end |
| Radbrytning | Automatisk inuti behållare | p — block, span — inline |
| onPress-stöd | Inbyggt stöd | Kräver extra omslag |
| Stilärvning | Ja, från överordnad Text | Ja, CSS-kaskad |
Den viktigaste skillnaden — stilärvning genom nästling av Text. Om den yttre Text har fontSize: 18 och color: blue, ärver alla nästlade Text dessa stilar. Vilken prop som helst kan åsidosättas i den inre Text genom att ange ett specifikt värde. Detta sparar kod och gör strukturen renare.
Text stöder de flesta CSS-egenskaper för typografi: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform. I React Native kopplas typsnitt in på plattformsnivå, inte via @font-face.
För att använda anpassade typsnitt måste de läggas till i mappen assets/fonts och anges i react-native.config.js. Efter ombyggnad av appen blir typsnittet tillgängligt via fontFamily. React Native stöder inte webbtypsnitt (Google Fonts) direkt — nedladdning av .ttf eller .otf-filer krävs.
Mekanismen för ärvning i Text skiljer sig från CSS. Stilar överförs endast från Text till nästlad Text, men inte från View till Text. Om ett typsnitt måste ställas in för hela appen används defaultProps för Text-komponenten eller en anpassad omslagskomponent.
<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>
I detta exempel ställer den yttre Text in fontSize: 18 och color: #333. Den inre Text ärver fontSize (18), men åsidosätter fontWeight till bold och color till #007AFF. Den yttre Text ärver bara sina egna stilar. Detta är en exakt analogi till hur nästlade span fungerar i HTML.
Låt oss titta på två typiska scenarier för att använda Text i React Native: formatering av text med nästling och att skapa en klickbar komponent med radbegränsning.
I detta exempel används Text för att visa flerradig text med markerade element: rubrik, datum och innehåll med länk.
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>
);
I denna struktur finns tre oberoende Text-komponenter (rubrik, datum, innehåll), var och en med sin egen stil. Inuti Text med innehåll finns ytterligare en Text med onPress för länken. Detta mönster används för nyhetsflöden, bloggar och kommentarer.
För att visa textförhandsvisning med ellips används numberOfLines. Detta är ett standardmönster för produktkort och artiklar i listor.
<Text
numberOfLines={2}
ellipsizeMode="tail"
style={styles.preview}
>
{longDescription}
</Text>
Egenskapen numberOfLines = 2 begränsar texten till två rader. Om texten är längre lägger React Native automatiskt till ellips i slutet av den andra raden. Parametern ellipsizeMode: 'tail' anger att ellipsen ska vara i slutet (head, middle, clip finns också).
Vanliga frågor
React Native använder en minimal uppsättning komponenter för plattformsoberoende kompatibilitet. Istället för flera semantiska HTML-taggar används en enda Text med olika stilar. Detta förenklar rendering på båda plattformarna från en kodbas.
Ja, Text stöder onPress och onLongPress för att hantera beröringar. För knappar med visuell återkoppling (tryckmarkering) är det dock bättre att använda TouchableOpacity eller Pressable med Text inuti. Text.onPress ger ingen visuell indikation på tryck som standard.
Text bryter automatiskt endast långa rader inuti sin behållare. Om texten inte bryts, kontrollera: finns det en breddbegränsning på den överordnade View, är nowrap inte inställt i stilarna, och överstiger numberOfLines inte tillgängligt antal rader.
Använd nästlad Text med fontWeight: 'bold' eller linda in texten i en komponent med denna stil. Du kan också använda fontWeight: '700' eller '800' för fetare stil. Tjockleken beror på tillgängligheten av motsvarande teckensnitt på enheten.
Nej, Text kan endast innehålla andra Text-komponenter eller strängar. Image kan inte vara barn till Text. För att visa text med ikoner, använd View med Text och Image som intilliggande element eller en komponent som stöder inbäddning av bilder.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också