Ik wil een nieuwe regel (zoals \r\n, <br />) in een tekstcomponent in React Native invoegen.
Als ik heb:
<text>
<br />
Hi~<br />
this is a test message.<br />
</text>
Vervolgens geeft React Native Hi~ this is a test message.
Is het mogelijk om tekst te renderen om een nieuwe regel toe te voegen, zoals:
Hi~
this is a test message.
Antwoord 1, autoriteit 100%
Dit zou het moeten doen:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
Antwoord 2, autoriteit 15%
U kunt ook het volgende doen:
<Text>{`
Hi~
this is a test message.
`}</Text>
Gemakkelijker naar mijn mening, omdat je geen dingen in de string hoeft in te voegen; wikkel het één keer en het behoudt al je regeleinden.
Antwoord 3, autoriteit 6%
Gebruik:
<Text>{`Hi,\nCurtis!`}</Text>
Resultaat:
Hallo,
Curtis!
Antwoord 4, autoriteit 2%
Dit werkte voor mij
<Text>{`Hi~\nthis is a test message.`}</Text>
(react-native 0.41.0)
Antwoord 5, autoriteit 2%
Als je al gegevens van toestandsvariabelen weergeeft, gebruik dit dan.
<Text>{this.state.user.bio.replace('<br/>', '\n')}</Text>
Antwoord 6, autoriteit 2%
Je kunt {'\n'}
gebruiken als regeleinden.
Hi~ {‘\n’} dit is een testbericht.
Antwoord 7
Oplossing 1:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
Oplossing 2:
<Text>{`
line 1
line 2
`}</Text>
Oplossing 3:
Hier was mijn oplossing voor het verwerken van meerdere <br/>
-tags:
<Text style={{ whiteSpace: "pre-line" }}>
{"Hi<br/> this is a test message.".split("<br/>").join("\n")}
</Text>
Oplossing 4:
gebruik maxWidth
voor automatisch regeleinde
<Text style={{ maxWidth:200}}>this is a test message. this is a test message</Text>
Antwoord 8
BEWERK:
als u Template Literalsgebruikt (zie binnen het <Text>
element), kunt u de regeleinden ook gewoon als volgt toevoegen:
import React, { Component } from 'react';
import { Text, View } from "react-native";
export default class extends Component {
(...)
render(){
return (
<View>
<Text>{`
1. line 1
2. line 2
3. line 3
`}</Text>
</View>
);
}
}
Antwoord 9
Ik had een eenregelige oplossing nodig die vertakt in een ternaire operator om mijn code netjes ingesprongen te houden.
{foo ? `First line of text\nSecond line of text` : `Single line of text`}
Sublieme syntaxisaccentuering helpt het regeleindeteken te benadrukken:
Antwoord 10
https://stackoverflow.com/a/44845810/10480776@Edison D’souza’s antwoord was precies wat ik was aan het zoeken naar. Het verving echter alleen het eerste voorkomen van de tekenreeks. Dit was mijn oplossing voor het omgaan met meerdere <br/>
-tags:
<Typography style={{ whiteSpace: "pre-line" }}>
{shortDescription.split("<br/>").join("\n")}
</Typography>
Sorry, ik kon geen commentaar geven op zijn bericht vanwege de beperking van de reputatiescore.
Antwoord 11
Er zijn twee opties:
Optie 1:Sjabloonliteratuur gebruiken.
const Message = 'This is a message';
<Text>
{`
Hi~
${Message}
`}
</Text>
Resultaat:
Hi~
This is a message
Optie 2:Gebruik {‘\n’} als regeleinden.
<Text>
Hello {'\n'}
World!
</Text>
Resultaat:
Hello
World!
Antwoord 12
Je kunt het op deze manier proberen
<text>{`${val}\n`}</text>
Antwoord 13
dit is een leuke vraag, je kunt dit op meerdere manieren doen
Eerste
<View>
<Text>
Hi this is first line {\n} hi this is second line
</Text>
</View>
wat betekent dat je {\n}backslash n kunt gebruiken om de regel te breken
Tweede
<View>
<Text>
Hi this is first line
</Text>
<View>
<Text>
hi this is second line
</Text>
</View>
</View>
wat betekent dat u een andere <View> component binnen eerst <Bekijken> en wikkel het om <Tekst> onderdeel
Veel plezier met coderen
Antwoord 14
Je kunt het ook gewoon als een constante in je rendermethode toevoegen, zodat het gemakkelijk opnieuw kan worden gebruikt:
render() {
const br = `\n`;
return (
<Text>Capital Street{br}Cambridge{br}CB11 5XE{br}United Kingdom</Text>
)
}
Antwoord 15
Eenvoudig te gebruiken backticks (ES 6-functie)
OPLOSSING 1
const Message = 'This is a message';
<Text>
{`
Hi~
${Message}
`}
</Text>
OPLOSSING 2Voeg “\n” toe in tekst
<Text>
Hi~{"\n"}
This is a message.
</Text>
Antwoord 16
Je kunt “ als volgt gebruiken:
<Text>{`Hi~
this is a test message.`}</Text>
Antwoord 17
Je kunt het als volgt doen:
{‘Maak\nUw account’}
Antwoord 18
Plaats {'\n'}
in de teksttag
<Text>
Hello {'\n'}
World!
</Text>
Antwoord 19
Een van de schoonste en meest flexibele manieren is het gebruik van Sjabloonletters.
Een voordeel van het gebruik hiervan is dat als je de inhoud van de stringvariabele in de tekst wilt weergeven, het overzichtelijker en ongecompliceerd is.
(Let op het gebruik van backtick-tekens)
const customMessage = 'This is a test message';
<Text>
{`
Hi~
${customMessage}
`}
</Text>
Zou resulteren in
Hi~
This is a test message
Antwoord 20
Hier is een oplossing voor React (niet React Native) met TypeScript.
Hetzelfde concept kan worden toegepast op React Native
import React from 'react';
type Props = {
children: string;
Wrapper?: any;
}
/**
* Automatically break lines for text
*
* Avoids relying on <br /> for every line break
*
* @example
* <Text>
* {`
* First line
*
* Another line, which will respect line break
* `}
* </Text>
* @param props
*/
export const Text: React.FunctionComponent<Props> = (props) => {
const { children, Wrapper = 'div' } = props;
return (
<Wrapper style={{ whiteSpace: 'pre-line' }}>
{children}
</Wrapper>
);
};
export default Text;
Gebruik:
<Text>
{`
This page uses server side rendering (SSR)
Each page refresh (either SSR or CSR) queries the GraphQL API and displays products below:
`}
</Text>
Antwoord 21
doe dit:
<Text>
{ "Hi~ \n this is a test message." }
<Text/>
Antwoord 22
Als u uw gegevens haalt uit een state variable or props
, heeft de Text-component een stijlprop met minWidth, maxWidth.
voorbeeld
const {height,width} = Dimensions.get('screen');
const string = `This is the description coming from the state variable, It may long thank this`
<Text style={{ maxWidth:width/2}}>{string}</Text>
Hiermee wordt tekst 50% breed van uw scherm weergegeven
Antwoord 23
Gebruik gewoon {“\n”} waar je de regel wilt afbreken
Antwoord 24
Een andere manier om <br>
in te voegen tussen tekstregels die in een array zijn gedefinieerd:
import react, { Fragment } from 'react';
const lines = [
'One line',
'Another line',
];
const textContent =
lines.reduce(items, line, index) => {
if (index > 0) {
items.push(<br key={'br-'+index}/>);
}
items.push(<Fragment key={'item-'+index}>{line}</Fragment>);
return items;
}, []);
Vervolgens kan de tekst als variabele worden gebruikt:
<Text>{textContent}</Text>
Indien niet beschikbaar, kan Fragment
op deze manier worden gedefinieerd:
const Fragment = (props) => props.children;
Antwoord 25
Deze code werkt in mijn omgeving. (react-native 0.63.4)
const charChangeLine = `
`
// const charChangeLine = "\n" // or it is ok
const textWithChangeLine = "abc\ndef"
<Text>{textWithChangeLine.replace('¥n', charChangeLine)}</Text>
Resultaat
abc
def
Antwoord 26
Als iemand op zoek is naar een oplossing waarbij je een nieuwe regel wilt hebben voor elke string in een array, dan zou je zoiets als dit kunnen doen:
import * as React from 'react';
import { Text, View} from 'react-native';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
description: ['Line 1', 'Line 2', 'Line 3'],
};
}
render() {
// Separate each string with a new line
let description = this.state.description.join('\n\n');
let descriptionElement = (
<Text>{description}</Text>
);
return (
<View style={{marginTop: 50}}>
{descriptionElement}
</View>
);
}
}
Zie snack voor een live voorbeeld: https:/ /snack.expo.io/@cmacdonnacha/react-native-new-break-line-example
Antwoord 27
soms schrijf ik zo:
<Text>
You have {" "}
{remaining}$ {" "}
from{" "}
{total}$
<Text>
(aangezien het er voor mij duidelijker uitziet)
Antwoord 28
Gebruik \n
in tekst en css white-space: pre-wrap;
Antwoord 29
<Text>
Hi~{"\n"}
this is a test message.
</Text>
Antwoord 30
Waarom zo hard werken? het is 2020, maak een component om dit soort problemen op te lossen
export class AppTextMultiLine extends React.PureComponent {
render() {
const textArray = this.props.value.split('\n');
return (
<View>
{textArray.map((value) => {
return <AppText>{value}</AppText>;
})}
</View>
)
}}