perché il testo occupa tutto lo spazio della vista, anziché solo lo spazio per "Ciao"?
Perché Viewè un contenitore flessibile e di default ha flexDirection: 'column'e alignItems: 'stretch', il che significa che i suoi figli dovrebbero essere allungati per riempire la sua larghezza.
(Si noti, per i documenti , che tutti i componenti in React Native sono display: 'flex'predefiniti e display: 'inline'non esistono affatto. In questo modo, il comportamento predefinito di a Textall'interno di Viewin in React Native differisce dal comportamento predefinito spanall'interno di a divsul web; in quest'ultimo caso, l'intervallo non riempirebbe l'ampiezza di divperché a spanè un elemento inline per impostazione predefinita. In React Native non esiste tale concetto.)
Come si può spostare / allineare il testo a destra?
La floatproprietà non esiste in React Native, ma ci sono molte opzioni disponibili (con comportamenti leggermente diversi) che ti permetteranno di allineare il testo a destra. Ecco quelli a cui riesco a pensare:
<View>
<Text style={{textAlign: 'right'}}>Hello, World!</Text>
</View>
(Questo approccio non cambia il fatto che Textriempie l'intera larghezza del View; allinea semplicemente il testo all'interno del Text.)
<View>
<Text style={{alignSelf: 'flex-end'}}>Hello, World!</Text>
</View>
Ciò riduce l' Textelemento alla dimensione richiesta per contenere il suo contenuto e lo mette alla fine della direzione trasversale (la direzione orizzontale, per impostazione predefinita) di View.
<View style={{alignItems: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
Ciò equivale all'impostazione alignSelf: 'flex-end'su tutti Viewi figli.
<View style={{flexDirection: 'row', justifyContent: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
flexDirection: 'row'imposta la direzione principale del layout in modo che sia orizzontale anziché verticale; justifyContentè proprio come alignItems, ma controlla l'allineamento nella direzione principale anziché nella direzione della croce.
<View style={{flexDirection: 'row'}}>
<Text style={{marginLeft: 'auto'}}>Hello, World!</Text>
</View>
Questo approccio è dimostrato, nel contesto del web e dei CSS reali, su https://stackoverflow.com/a/34063808/1709587 .
<View>
<Text style={{position: 'absolute', right: 0}}>Hello, World!</Text>
</View>
Come nel vero CSS, questo prende Text"fuori flusso", il che significa che i suoi fratelli saranno in grado di sovrapporlo e la sua posizione verticale sarà in cima al Viewdefault (anche se puoi impostare esplicitamente una distanza dalla cima del Viewusando la topproprietà style).
Naturalmente, quale di questi vari approcci vuoi usare - e se la scelta tra di loro è importante - dipenderà dalle tue circostanze precise.
justifyContent,alignItems,alignSelf. Mi chiedo quale sia corretto.