Przejdź do treści głównej

Tekst

Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

Komponent React do wyświetlania tekstu.

Text obsługuje zagnieżdżanie, stylowanie oraz obsługę dotyku.

W poniższym przykładzie zagnieżdżony tytuł i treść odziedziczą właściwość fontFamily z styles.baseText, ale tytuł dostarcza własne dodatkowe style. Tytuł i treść ułożą się jeden pod drugim z powodu literalnych znaków nowej linii:

Zagnieżdżony tekst

Zarówno Android, jak i iOS pozwalają na wyświetlanie sformatowanego tekstu poprzez adnotowanie zakresów ciągu znaków konkretnym formatowaniem, takim jak pogrubienie czy kolor (NSAttributedString w iOS, SpannableString w Androidzie). W praktyce jest to bardzo żmudne. W React Native postanowiliśmy użyć paradygmatu znanego z sieci, gdzie można zagnieżdżać tekst, aby osiągnąć ten sam efekt.

W tle React Native konwertuje to do płaskiego NSAttributedString lub SpannableString, który zawiera następujące informacje:

"I am bold and red"
0-9: bold
9-17: bold, red

Kontenery

Element <Text> jest unikalny pod względem układu: wszystko wewnątrz niego nie używa już układu Flexbox, lecz układu tekstowego. Oznacza to, że elementy wewnątrz <Text> nie są już prostokątami, lecz zawijają się przy końcu linii.

tsx
<Text>
<Text>First part and </Text>
<Text>second part</Text>
</Text>
// Text container: the text will be inline, if the space allows it
// |First part and second part|

// otherwise, the text will flow as if it was one
// |First part |
// |and second |
// |part |

<View>
<Text>First part and </Text>
<Text>second part</Text>
</View>
// View container: each text is its own block
// |First part and|
// |second part |

// otherwise, the text will flow in its own block
// |First part |
// |and |
// |second part|

Ograniczone dziedziczenie stylów

W sieci, zwykłym sposobem ustawienia rodziny czcionek i rozmiaru dla całego dokumentu jest skorzystanie z dziedziczonych właściwości CSS:

css
html {
font-family:
'lucida grande', tahoma, verdana, arial, sans-serif;
font-size: 11px;
color: #141823;
}

Wszystkie elementy w dokumencie odziedziczą tę czcionkę, chyba że one lub któryś z ich rodziców określi nową regułę.

W React Native jesteśmy bardziej rygorystyczni: musisz zawinąć wszystkie węzły tekstowe w komponencie <Text>. Nie możesz mieć węzła tekstowego bezpośrednio pod <View>.

tsx
// BAD: will raise exception, can't have a text node as child of a <View>
<View>
Some text
</View>

// GOOD
<View>
<Text>
Some text
</Text>
</View>

Tracisz także możliwość ustawienia domyślnej czcionki dla całego poddrzewa. Tymczasem fontFamily akceptuje tylko pojedynczą nazwę czcionki, co różni się od font-family w CSS. Zalecanym sposobem na używanie spójnych czcionek i rozmiarów w całej aplikacji jest utworzenie komponentu MyAppText, który je zawiera, i użycie tego komponentu w całej aplikacji. Możesz także użyć tego komponentu do tworzenia bardziej specyficznych komponentów, takich jak MyAppHeaderText dla innych rodzajów tekstu.

tsx
<View>
<MyAppText>
Text styled with the default font for the entire application
</MyAppText>
<MyAppHeaderText>Text styled as a header</MyAppHeaderText>
</View>

Zakładając, że MyAppText jest komponentem, który renderuje swoje dzieci w komponencie Text ze stylami, to MyAppHeaderText można zdefiniować następująco:

tsx
const MyAppHeaderText = ({children}) => {
return (
<MyAppText>
<Text style={{fontSize: 20}}>{children}</Text>
</MyAppText>
);
};

Komponowanie MyAppText w ten sposób zapewnia, że otrzymujemy style z komponentu najwyższego poziomu, ale pozostawia nam możliwość dodawania lub nadpisywania ich w konkretnych przypadkach użycia.

React Native wciąż ma koncepcję dziedziczenia stylów, ale ograniczonego do poddrzew tekstowych. W tym przypadku druga część będzie zarówno pogrubiona, jak i czerwona.

tsx
<Text style={{fontWeight: 'bold'}}>
I am bold
<Text style={{color: 'red'}}>and red</Text>
</Text>

Uważamy, że ten bardziej ograniczony sposób stylowania tekstu przyniesie lepsze aplikacje:

  • (Deweloper) Komponenty React są projektowane z myślą o silnej izolacji: Powinieneś móc umieścić komponent w dowolnym miejscu aplikacji, ufając, że o ile właściwości są takie same, będzie on wyglądał i zachowywał się tak samo. Właściwości tekstu, które mogłyby dziedziczyć spoza właściwości, złamałyby tę izolację.

  • (Implementujący) Implementacja React Native jest także uproszczona. Nie musimy mieć pola fontFamily na każdym pojedynczym elemencie i nie musimy potencjalnie przeszukiwać drzewa aż do korzenia za każdym razem, gdy wyświetlamy węzeł tekstowy. Dziedziczenie stylów jest zakodowane tylko wewnątrz natywnego komponentu Text i nie wycieka do innych komponentów ani samego systemu.



Dokumentacja

Właściwości

accessibilityHint

Podpowiedź ułatwień dostępu pomaga użytkownikom zrozumieć, co się stanie, gdy wykonają akcję na elemencie ułatwień dostępu, gdy wynik nie jest jasny z etykiety ułatwień dostępu.

Type
string


accessibilityLanguage
iOS

Wartość określająca język używany przez czytnik ekranu podczas interakcji użytkownika z elementem. Powinna być zgodna ze specyfikacją BCP 47.

Więcej informacji znajdziesz w dokumentacji accessibilityLanguage dla iOS.

Type
string


accessibilityLabel

Nadpisuje tekst odczytywany przez czytnik ekranu, gdy użytkownik wchodzi w interakcję z elementem. Domyślnie etykieta jest konstruowana poprzez przejście wszystkich dzieci i zebranie wszystkich węzłów Text oddzielonych spacją.

Type
string


accessibilityRole

Nakazuje czytnikowi ekranu traktować aktualnie fokusowany element jako posiadający konkretną rolę.

Na iOS te role są mapowane na odpowiednie cechy ułatwień dostępu. Przycisk obrazkowy ma taką samą funkcjonalność jak ustawienie cechy na 'image' i 'button' jednocześnie. Więcej informacji znajdziesz w przewodniku o ułatwieniach dostępu.

Na Androidzie te role mają podobną funkcjonalność w TalkBack jak dodawanie cech ułatwień dostępu w Voiceover na iOS.



accessibilityState

Nakazuje czytnikowi ekranu traktować aktualnie fokusowany element jako będący w określonym stanie.

Możesz podać jeden stan, brak stanu lub wiele stanów. Stany muszą być przekazane jako obiekt, np. {selected: true, disabled: true}.



accessibilityActions

Akcje ułatwień dostępu pozwalają technologiom asystującym na programowe wywoływanie akcji komponentu. Właściwość accessibilityActions powinna zawierać listę obiektów akcji. Każdy obiekt akcji powinien zawierać pola name i label.

Więcej informacji znajdziesz w przewodniku o ułatwieniach dostępu.

TypeRequired
arrayNo


onAccessibilityAction

Wywoływana, gdy użytkownik wykonuje akcje ułatwień dostępu. Jedynym argumentem tej funkcji jest zdarzenie zawierające nazwę akcji do wykonania.

Więcej informacji znajdziesz w przewodniku o ułatwieniach dostępu.

TypeRequired
functionNo


accessible

Gdy ustawione na true, wskazuje że widok jest elementem ułatwień dostępu.

Więcej informacji znajdziesz w przewodniku o ułatwieniach dostępu.

TypeDefault
booleantrue


adjustsFontSizeToFit

Określa, czy czcionki powinny być automatycznie skalowane w dół, aby dopasować się do ograniczeń stylu.

TypeDefault
booleanfalse


allowFontScaling

Określa, czy czcionki powinny skalować się zgodnie z ustawieniami dostępności Rozmiaru Tekstu.

TypeDefault
booleantrue


android_hyphenationFrequency
Android

Ustawia częstotliwość automatycznego dzielenia wyrazów przy określaniu podziałów słów na Androidzie w wersji API Level 23+.

TypeDefault
enum('none', 'normal','full')'none'


aria-busy

Wskazuje, że element jest modyfikowany, a technologie asystujące powinny zaczekać z powiadomieniem użytkownika do zakończenia zmian.

TypeDefault
booleanfalse


aria-checked

Wskazuje stan elementu z możliwością zaznaczenia. Przyjmuje wartość logiczną lub ciąg "mixed" dla pól wyboru w stanie mieszanym.

TypeDefault
boolean, 'mixed'false


aria-disabled

Wskazuje, że element jest widoczny, ale wyłączony - nie można go edytować ani obsługiwać.

TypeDefault
booleanfalse


aria-expanded

Wskazuje, czy rozwijany element jest aktualnie rozwinięty czy zwinięty.

TypeDefault
booleanfalse


aria-label

Definiuje wartość tekstową etykietującą interaktywny element.

Type
string


aria-selected

Wskazuje, czy wybieralny element jest aktualnie zaznaczony.

Type
boolean

dataDetectorType
Android

Określa typy danych konwertowane na klikalne adresy URL w elemencie tekstowym. Domyślnie nie wykrywa się żadnych typów danych.

Można podać tylko jeden typ.

TypeDefault
enum('phoneNumber', 'link', 'email', 'none', 'all')'none'


disabled
Android

Określa wyłączony stan widoku tekstowego do celów testowych.

TypeDefault
boolfalse


dynamicTypeRamp
iOS

Skala Dynamic Type do zastosowania dla tego elementu na iOS.

TypeDefault
enum('caption2', 'caption1', 'footnote', 'subheadline', 'callout', 'body', 'headline', 'title3', 'title2', 'title1', 'largeTitle')'body'


ellipsizeMode

Gdy ustawiono numberOfLines, ta właściwość definiuje sposób obcięcia tekstu. numberOfLines musi być ustawione razem z tą właściwością.

Może przyjmować następujące wartości:

  • head - Linia jest wyświetlana tak, że koniec mieści się w kontenerze, a brakujący tekst na początku linii jest oznaczony wielokropkiem, np. "...wxyz"

  • middle - Linia jest wyświetlana tak, że początek i koniec mieszczą się w kontenerze, a brakujący tekst w środku jest oznaczony wielokropkiem, np. "ab...yz"

  • tail - Linia jest wyświetlana tak, że początek mieści się w kontenerze, a brakujący tekst na końcu linii jest oznaczony wielokropkiem, np. "abcd..."

  • clip - Linie nie są rysowane poza krawędzią kontenera tekstu.

uwaga

Na Androidzie, gdy numberOfLines jest ustawione na wartość wyższą niż 1, tylko wartość tail będzie działać poprawnie.

TypeDefault
enum('head', 'middle', 'tail', 'clip')tail


id

Używane do lokalizowania tego widoku z kodu natywnego. Ma pierwszeństwo przed właściwością nativeID.

Type
string


maxFontSizeMultiplier

Określa maksymalną skalę, jaką może osiągnąć czcionka gdy allowFontScaling jest włączone. Możliwe wartości:

  • null/undefined: dziedziczy z węzła nadrzędnego lub globalnej wartości domyślnej (0)

  • 0: brak limitu, ignoruj ustawienia nadrzędne/globalne

  • >= 1: ustawia maxFontSizeMultiplier dla tego węzła na podaną wartość

TypeDefault
numberundefined


minimumFontScale

Określa minimalną skalę, jaką może osiągnąć czcionka gdy adjustsFontSizeToFit jest włączone (wartości 0.01-1.0).

Type
number


nativeID

Używane do lokalizowania tego widoku z kodu natywnego.

Type
string


numberOfLines

Używane do obcięcia tekstu wielokropkiem po obliczeniu układu tekstu, w tym zawijania wierszy, tak aby całkowita liczba wierszy nie przekroczyła tej wartości. Ustawienie tej właściwości na 0 spowoduje usunięcie ograniczenia liczby wierszy.

Ta właściwość jest często używana z ellipsizeMode.

TypeDefault
number0


onLayout

Wywoływane przy montowaniu i zmianach układu.

Type
({nativeEvent: LayoutEvent}) => void


onLongPress

Ta funkcja jest wywoływana przy długim przyciśnięciu.

Type
({nativeEvent: PressEvent}) => void


onMoveShouldSetResponder

Czy ten widok chce „przejąć” odpowiedzialność za dotyk? Wywoływane dla każdego ruchu dotyku na View, gdy nie jest on aktualnym responderem.

Type
({nativeEvent: PressEvent}) => boolean


onPress

Funkcja wywoływana przy naciśnięciu przez użytkownika, uruchamiana po onPressOut.

Type
({nativeEvent: PressEvent}) => void


onPressIn

Wywoływany natychmiast po rozpoczęciu dotyku, przed onPressOut i onPress.

Type
({nativeEvent: PressEvent}) => void


onPressOut

Wywoływany po zwolnieniu dotyku.

Type
({nativeEvent: PressEvent}) => void


onResponderGrant

Widok rozpoczął reagowanie na zdarzenia dotykowe. To moment na podświetlenie i pokazanie użytkownikowi, co się dzieje.

W systemie Android zwróć true z tego callbacku, aby uniemożliwić innym natywnym komponentom przejęcie roli respondera do czasu zakończenia działania tego respondera.

Type
({nativeEvent: PressEvent}) => void | boolean


onResponderMove

Użytkownik porusza palcem.

Type
({nativeEvent: PressEvent}) => void


onResponderRelease

Wywoływane przy zakończeniu dotyku.

Type
({nativeEvent: PressEvent}) => void


onResponderTerminate

Responder został odebrany temu View. Mógł zostać przejęty przez inne widoki po wywołaniu onResponderTerminationRequest lub przez system bez pytania (np. przy otwieraniu Centrum sterowania/Powiadomień w iOS).

Type
({nativeEvent: PressEvent}) => void


onResponderTerminationRequest

Inny View chce zostać responderem i prosi ten View o zwolnienie roli respondera. Zwrócenie true pozwala na zwolnienie.

Type
({nativeEvent: PressEvent}) => boolean


onStartShouldSetResponderCapture

Jeżeli nadrzędny View chce uniemożliwić dziecku View przejęcie roli respondera przy rozpoczęciu dotyku, powinien mieć tę funkcję zwracającą true.

Type
({nativeEvent: PressEvent}) => boolean


onTextLayout

Wywoływana przy zmianie układu tekstu.

Type
(TextLayoutEvent) => mixed


pressRetentionOffset

Gdy przewijanie jest wyłączone, określa jak daleko można przesunąć palec poza przycisk przed jego dezaktywacją. Po dezaktywacji, przesuń palec z powrotem – przycisk zostanie ponownie aktywowany! Przesuwaj wielokrotnie tam i z powrotem przy wyłączonym przewijaniu. Przekaż stałą wartość, aby zmniejszyć alokację pamięci.

Type
Rect, number


ref

Funkcja settera ref, która otrzyma węzeł elementu po zamontowaniu.

Uwaga: komponenty Text nie dostarczają węzłów tekstowych w taki sposób, jak elementy akapitu (<p>) w sieci, które są węzłami elementów. Węzły tekstowe znajdują się jako ich węzły potomne.



role

role komunikuje cel komponentu użytkownikowi technologii asystujących. Ma pierwszeństwo przed właściwością accessibilityRole.

Type
Role


selectable

Pozwala użytkownikowi zaznaczać tekst do użycia z natywną funkcjonalnością kopiowania i wklejania.

TypeDefault
booleanfalse


selectionColor
Android

Kolor podświetlenia tekstu.

Type
color


style



suppressHighlighting
iOS

Gdy true, naciśnięcie tekstu nie powoduje wizualnej zmiany. Domyślnie przy naciśnięciu tekst jest podświetlany szarą owalną ramką.

TypeDefault
booleanfalse


testID

Używany do lokalizowania tego widoku w testach end-to-end.

Type
string


textBreakStrategy
Android

Ustawia strategię łamania tekstu w Androidzie API Level 23+. Możliwe wartości: simple, highQuality, balanced.

TypeDefault
enum('simple', 'highQuality', 'balanced')highQuality


lineBreakStrategyIOS
iOS

Ustawia strategię łamania wierszy na iOS 14+. Możliwe wartości: none, standard, hangul-word, push-out.

TypeDefault
enum('none', 'standard', 'hangul-word', 'push-out')'none'

Definicje Typów

TextLayout

Układ tekstu

Obiekt TextLayout jest częścią callbacku TextLayoutEvent i zawiera dane pomiarowe dla linii tekstu Text.

Przykład

js
{
capHeight: 10.496,
ascender: 14.624,
descender: 4,
width: 28.224,
height: 18.624,
xHeight: 6.048,
x: 0,
y: 0
}

Właściwości

NameTypeOptionalDescription
ascendernumberNoThe line ascender height after the text layout changes.
capHeightnumberNoHeight of capital letter above the baseline.
descendernumberNoThe line descender height after the text layout changes.
heightnumberNoHeight of the line after the text layout changes.
widthnumberNoWidth of the line after the text layout changes.
xnumberNoLine X coordinate inside the Text component.
xHeightnumberNoDistance between the baseline and median of the line (corpus size).
ynumberNoLine Y coordinate inside the Text component.

TextLayoutEvent

Zdarzenie układu tekstu

Obiekt TextLayoutEvent jest zwracany w wywołaniu zwrotnym w wyniku zmiany układu komponentu. Zawiera klucz lines z wartością będącą tablicą zawierającą obiekty TextLayout odpowiadające każdej wyrenderowanej linii tekstu.

Przykład

js
{
lines: [
TextLayout,
TextLayout,
// ...
];
target: 1127;
}

Właściwości

NameTypeOptionalDescription
linesarray of TextLayoutsNoProvides the TextLayout data for every rendered line.
targetnumberNoThe node id of the element.