admin管理员组文章数量:1125616
I want to insert a new line (like \r\n, <br />) in a Text component in React Native.
If I have:
<text>
<br />
Hi~<br />
this is a test message.<br />
</text>
Then React Native renders Hi~ this is a test message.
Is it possible render text to add a new line like so:
Hi~
this is a test message.
I want to insert a new line (like \r\n, <br />) in a Text component in React Native.
If I have:
<text>
<br />
Hi~<br />
this is a test message.<br />
</text>
Then React Native renders Hi~ this is a test message.
Is it possible render text to add a new line like so:
Hi~
this is a test message.
Share
Improve this question
edited Oct 26, 2020 at 9:00
Angshu31
1,2601 gold badge10 silver badges21 bronze badges
asked Sep 9, 2015 at 1:29
CurtisCurtis
6,6222 gold badges12 silver badges8 bronze badges
2
|
42 Answers
Reset to default 1 2 Next 1102This should do it:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
You can also do:
<Text>{`
Hi~
this is a test message.
`}</Text>
Easier in my opinion, because you don't have to insert stuff within the string; just wrap it once and it keeps all your line-breaks.
Use:
<Text>{`Hi,\nCurtis!`}</Text>
Result:
Hi,
Curtis!
Solution 1:
<Text>
line 1{"\n"}
line 2
</Text>
Solution 2:
<Text>{`
line 1
line 2
`}</Text>
Solution 3:
Here was my solution of handling multiple <br/>
tags:
<Text style={{ whiteSpace: "pre-line" }}>
{"Hi<br/> this is a test message.".split("<br/>").join("\n")}
</Text>
Solution 4:
use maxWidth
for auto line break
<Text style={{ maxWidth:200}}>this is a test message. this is a test message</Text>
This worked for me
<Text>{`Hi~\nthis is a test message.`}</Text>
(react-native 0.41.0)
If at all you are displaying data from state variables, use this.
<Text>{this.state.user.bio.replace('<br/>', '\n')}</Text>
You can use {'\n'}
as line breaks.
Hi~ {'\n'} this is a test message.
https://stackoverflow.com/a/44845810/10480776 @Edison D'souza's answer was exactly what I was looking for. However, it was only replacing the first occurrence of the string. Here was my solution to handling multiple <br/>
tags:
<Typography style={{ whiteSpace: "pre-line" }}>
{shortDescription.split("<br/>").join("\n")}
</Typography>
Sorry, I couldn't comment on his post due to the reputation score limitation.
EDIT :
if you use Template Literals (see within the <Text>
element) , you can also just add the line breaks like this:
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>
);
}
}
Use {"\n"}
where you want the line break
I needed a one-line solution branching in a ternary operator to keep my code nicely indented.
{foo ? `First line of text\nSecond line of text` : `Single line of text`}
Sublime syntax highlighting helps highlight the line-break character:
this is a nice question , you can do this in multiple ways First
<View>
<Text>
Hi this is first line {\n} hi this is second line
</Text>
</View>
which means you can use {\n} backslash n to break the line
Second
<View>
<Text>
Hi this is first line
</Text>
<View>
<Text>
hi this is second line
</Text>
</View>
</View>
which means you can use another <View> component inside first <View> and wrap it around <Text> component
Happy Coding
You can try using like this
<text>{`${val}\n`}</text>
Here is a solution for React (not React Native) using TypeScript.
The same concept can be applied to 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;
Usage:
<Text>
{`
This page uses server side rendering (SSR)
Each page refresh (either SSR or CSR) queries the GraphQL API and displays products below:
`}
</Text>
Displays:
You can use `` like this:
<Text>{`Hi~
this is a test message.`}</Text>
You can do it as follows:
{'Create\nYour Account'}
You can also just add it as a constant in your render method so its easy to reuse:
render() {
const br = `\n`;
return (
<Text>Capital Street{br}Cambridge{br}CB11 5XE{br}United Kingdom</Text>
)
}
Just put {'\n'}
within the Text tag
<Text>
Hello {'\n'}
World!
</Text>
One of the cleanest and most flexible way would be using Template Literals.
An advantage of using this is, if you want to display the content of string variable in the text body, it is cleaner and straight forward.
(Please note the usage of backtick characters)
const customMessage = 'This is a test message';
<Text>
{`
Hi~
${customMessage}
`}
</Text>
Would result in
Hi~
This is a test message
Simple use backticks (ES 6 feature)
SOLUTION 1
const Message = 'This is a message';
<Text>
{`
Hi~
${Message}
`}
</Text>
SOLUTION 2 Add "\n" in Text
<Text>
Hi~{"\n"}
This is a message.
</Text>
I know this is quite old but I came up with a solution for automatically breaking lines which allows you to pass in the text in the usual way (no trickery)
I created the following component
import React, {} from "react";
import {Text} from "react-native";
function MultiLineText({children, ...otherProps}) {
const splits = children.split("\\n")
console.log(splits);
const items = []
for (let s of splits){
items.push(s)
items.push("\n")
}
return (
<Text {...otherProps}>{items}</Text>
);
}
export default MultiLineText;
Then you can just use it like so..
<MultiLineText style={styles.text}>This is the first line\nThis is teh second line</MultiLineText>
There are two main solutions for this.
Method 1: Just add the '\n'
like below
<Text>
First Line {'\n'} Second Line.
</Text>
Method 2: Add the line break it in the string literals, like below.
<Text>
`First Line
Second Line`.
</Text>
For more information, please refer the below tutorial.
https://sourcefreeze.com/how-to-insert-a-line-break-into-a-text-component-in-react-native/
Y'all can try this if trying to use a variable inside an element.
<Text>{newText}</Text>
const newText= text.body.split("\n").map((item, key) => {
return (
<span key={key}>
{item}
<br />
</span>
);
});
do this:
<Text>
This is the first line.{"\n"}This is the second line.
</Text>
If you're getting your data from a state variable or props
, the Text component has a style prop with minWidth, maxWidth.
example
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>
This will display text 50% width of your screen
Use \n
in text and css white-space: pre-wrap;
Another way to insert <br>
between text lines that are defined in an array:
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;
}, []);
Then the text can be used as variable:
<Text>{textContent}</Text>
If not available, Fragment
can be defined this way:
const Fragment = (props) => props.children;
This code works on my environment. (react-native 0.63.4)
const charChangeLine = `
`
// const charChangeLine = "\n" // or it is ok
const textWithChangeLine = "abc\ndef"
<Text>{textWithChangeLine.replace('¥n', charChangeLine)}</Text>
Result
abc
def
In case anyone is looking for a solution where you want to have a new line for each string in an array you could do something like this:
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>
);
}
}
See snack for a live example: https://snack.expo.io/@cmacdonnacha/react-native-new-break-line-example
sometimes I write like this:
<Text>
You have {" "}
{remaining}$ {" "}
from{" "}
{total}$
<Text>
(as it looks more clear for myself)
本文标签: javascriptHow can I insert a line break into a ltTextgt component in React NativeStack Overflow
版权声明:本文标题:javascript - How can I insert a line break into a <Text> component in React Native? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736668447a1946788.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
\n
where you want to break the line. – Sid009 Commented Feb 1, 2020 at 8:18