如何在 React Native 中的 <Text> 组件中插入换行符?
How can I insert a line break into a <Text> component in React Native?
我想在 React Native 的文本组件中插入一个新行(如 \r\n、
)。
如果我有:
<text>
<br />
Hi~<br />
this is a test message.<br />
</text>
然后 React Native 渲染 Hi~ this is a test message.
是否可以像这样渲染文本以添加新行:
Hi~
this is a test message.
应该这样做:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
您还可以这样做:
<Text>{`
Hi~
this is a test message.
`}</Text>
我认为更简单,因为您不必在字符串中插入内容;只需将它包装一次,它就会保留你所有的换行符。
这对我有用
<Text>{`Hi~\nthis is a test message.`}</Text>
(react-native 0.41.0)
我需要一个在三元运算符中分支的单行解决方案,以保持我的代码很好地缩进。
{foo ? `First line of text\nSecond line of text` : `Single line of text`}
Sublime 语法高亮有助于突出显示换行符:
如果您要显示来自状态变量的数据,请使用它。
<Text>{this.state.user.bio.replace('<br/>', '\n')}</Text>
您可以使用 {'\n'}
作为换行符。
嗨~ {'\n'} 这是一条测试消息。
使用:
<Text>{`Hi,\nCurtis!`}</Text>
结果:
Hi,
Curtis!
在文本中使用 \n
和 css white-space: pre-wrap;
你可以试试这样使用
<text>{`${val}\n`}</text>
编辑:
如果您使用 Template Literals(请参阅 <Text>
元素),您也可以像这样添加换行符:
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>
);
}
}
你可以像这样使用``:
<Text>{`Hi~
this is a test message.`}</Text>
您可以按如下方式进行:
{'Create\nYour Account'}
如果有人正在寻找一种解决方案,您希望为数组中的每个字符串换行,您可以这样做:
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>
);
}
}
查看现场示例小吃:https://snack.expo.io/@cmacdonnacha/react-native-new-break-line-example
您也可以将它作为常量添加到渲染方法中,以便于重复使用:
render() {
const br = `\n`;
return (
<Text>Capital Street{br}Cambridge{br}CB11 5XE{br}United Kingdom</Text>
)
}
只需在要换行的地方使用 {"\n"}
只需将 {'\n'}
放在文本标签内
<Text>
Hello {'\n'}
World!
</Text>
在数组中定义的文本行之间插入 <br>
的另一种方法:
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;
}, []);
然后文本可以用作变量:
<Text>{textContent}</Text>
如果不可用,Fragment
可以这样定义:
const Fragment = (props) => props.children;
最干净、最灵活的方法之一是使用 Template Literals。
使用这个的一个好处是,如果你想在文本正文中显示字符串变量的内容,它更清晰直接。
(请注意反引号的用法)
const customMessage = 'This is a test message';
<Text>
{`
Hi~
${customMessage}
`}
</Text>
会导致
Hi~
This is a test message
@Edison D'souza 的回答正是我要找的。但是,它只是替换字符串的第一次出现。这是我处理多个 <br/>
标签的解决方案:
<Typography style={{ whiteSpace: "pre-line" }}>
{shortDescription.split("<br/>").join("\n")}
</Typography>
抱歉,由于声誉分数限制,我无法评论他的 post。
这是使用 TypeScript 的 React(不是 React Native)解决方案。
同样的概念可以应用到 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;
用法:
<Text>
{`
This page uses server side rendering (SSR)
Each page refresh (either SSR or CSR) queries the GraphQL API and displays products below:
`}
</Text>
显示:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
为什么这么努力?现在是 2020 年,创建一个组件来处理此类问题
export class AppTextMultiLine extends React.PureComponent {
render() {
const textArray = this.props.value.split('\n');
return (
<View>
{textArray.map((value) => {
return <AppText>{value}</AppText>;
})}
</View>
)
}}
简单使用反引号(ES 6 特性)
解决方案 1
const Message = 'This is a message';
<Text>
{`
Hi~
${Message}
`}
</Text>
解决方案 2 在文本中添加“\n”
<Text>
Hi~{"\n"}
This is a message.
</Text>
React 不会喜欢您将 HTML <br />
放在它期望文本的位置,并且 \n
并不总是呈现,除非在 <pre>
标记中。
也许将每个换行字符串(段落)包装在一个 <p>
标记中,如下所示:
{text.split("\n").map((line, idx) => <p key={idx}>{line}</p>)}
如果您正在迭代 React 组件,请不要忘记 key
。
这样做:
<Text>
{ "Hi~ \n this is a test message." }
<Text/>
这是一个很好的问题,您可以通过多种方式解决这个问题
第一个
<View>
<Text>
Hi this is first line {\n} hi this is second line
</Text>
</View>
这意味着您可以使用 {\n} 反斜杠 n 来换行
第二
<View>
<Text>
Hi this is first line
</Text>
<View>
<Text>
hi this is second line
</Text>
</View>
</View>
这意味着您可以在第一个 <View> 中使用另一个 <View> 组件并将其包裹在 < 文本>组件
快乐编码
如果您从 state variable or props
获取数据,Text 组件有一个带有 minWidth、maxWidth 的样式属性。
例子
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>
这会将文本显示为屏幕宽度的 50%
此代码适用于我的环境。 (反应本机 0.63.4)
const charChangeLine = `
`
// const charChangeLine = "\n" // or it is ok
const textWithChangeLine = "abc\ndef"
<Text>{textWithChangeLine.replace('¥n', charChangeLine)}</Text>
结果
abc
def
嘿,像这样放它们对我有用!
<div>
<p style={{ fontWeight: "bold", whitespace: "pre-wrap" }}>
{" "}
Hello {"\n"}
</p>
{"\n"}
<p>I am here</p>
</div>
我使用 p 标签 作为新行。所以我在这里粘贴了代码。这对任何人都有帮助。
const new2DArr = associativeArr.map((crntVal )=>{
return <p > Id : {crntVal.id} City Name : {crntVal.cityName} </p>;
});
有时候我是这样写的:
<Text>
You have {" "}
{remaining}$ {" "}
from{" "}
{total}$
<Text>
(因为我自己看起来更清楚)
2021,这适用于 REACT 状态值 (您必须添加空 div,就像 return 语句一样)
this.setState({form: (<> line 1 <br /> line 2 </>) })
解决方案 1:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
解决方案 2:
<Text>{`
line 1
line 2
`}</Text>
解决方案 3:
这是我处理多个 <br/>
标签的解决方案:
<Text style={{ whiteSpace: "pre-line" }}>
{"Hi<br/> this is a test message.".split("<br/>").join("\n")}
</Text>
解决方案 4:
使用maxWidth
自动换行
<Text style={{ maxWidth:200}}>this is a test message. this is a test message</Text>
最好的方法是使用 UL 或 OL 之类的列表,并进行一些样式设置,例如制作列表样式 none,然后您可以使用 <li> dhdhdhhd </li>
我知道这已经很老了,但我想出了一个自动换行的解决方案,它允许您以通常的方式传递文本(没有诡计)
我创建了以下组件
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;
那你就可以这么用了..
<MultiLineText style={styles.text}>This is the first line\nThis is teh second line</MultiLineText>
这应该可以解决问题![=11=]
<Text style={{styles.text}}>{`Hi~\nthis is a test message.`}</Text>
我想在 React Native 的文本组件中插入一个新行(如 \r\n、
)。
如果我有:
<text>
<br />
Hi~<br />
this is a test message.<br />
</text>
然后 React Native 渲染 Hi~ this is a test message.
是否可以像这样渲染文本以添加新行:
Hi~
this is a test message.
应该这样做:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
您还可以这样做:
<Text>{`
Hi~
this is a test message.
`}</Text>
我认为更简单,因为您不必在字符串中插入内容;只需将它包装一次,它就会保留你所有的换行符。
这对我有用
<Text>{`Hi~\nthis is a test message.`}</Text>
(react-native 0.41.0)
我需要一个在三元运算符中分支的单行解决方案,以保持我的代码很好地缩进。
{foo ? `First line of text\nSecond line of text` : `Single line of text`}
Sublime 语法高亮有助于突出显示换行符:
如果您要显示来自状态变量的数据,请使用它。
<Text>{this.state.user.bio.replace('<br/>', '\n')}</Text>
您可以使用 {'\n'}
作为换行符。
嗨~ {'\n'} 这是一条测试消息。
使用:
<Text>{`Hi,\nCurtis!`}</Text>
结果:
Hi,
Curtis!
在文本中使用 \n
和 css white-space: pre-wrap;
你可以试试这样使用
<text>{`${val}\n`}</text>
编辑:
如果您使用 Template Literals(请参阅 <Text>
元素),您也可以像这样添加换行符:
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>
);
}
}
你可以像这样使用``:
<Text>{`Hi~
this is a test message.`}</Text>
您可以按如下方式进行:
{'Create\nYour Account'}
如果有人正在寻找一种解决方案,您希望为数组中的每个字符串换行,您可以这样做:
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>
);
}
}
查看现场示例小吃:https://snack.expo.io/@cmacdonnacha/react-native-new-break-line-example
您也可以将它作为常量添加到渲染方法中,以便于重复使用:
render() {
const br = `\n`;
return (
<Text>Capital Street{br}Cambridge{br}CB11 5XE{br}United Kingdom</Text>
)
}
只需在要换行的地方使用 {"\n"}
只需将 {'\n'}
放在文本标签内
<Text>
Hello {'\n'}
World!
</Text>
在数组中定义的文本行之间插入 <br>
的另一种方法:
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;
}, []);
然后文本可以用作变量:
<Text>{textContent}</Text>
如果不可用,Fragment
可以这样定义:
const Fragment = (props) => props.children;
最干净、最灵活的方法之一是使用 Template Literals。
使用这个的一个好处是,如果你想在文本正文中显示字符串变量的内容,它更清晰直接。
(请注意反引号的用法)
const customMessage = 'This is a test message';
<Text>
{`
Hi~
${customMessage}
`}
</Text>
会导致
Hi~
This is a test message
<br/>
标签的解决方案:
<Typography style={{ whiteSpace: "pre-line" }}>
{shortDescription.split("<br/>").join("\n")}
</Typography>
抱歉,由于声誉分数限制,我无法评论他的 post。
这是使用 TypeScript 的 React(不是 React Native)解决方案。
同样的概念可以应用到 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;
用法:
<Text>
{`
This page uses server side rendering (SSR)
Each page refresh (either SSR or CSR) queries the GraphQL API and displays products below:
`}
</Text>
显示:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
为什么这么努力?现在是 2020 年,创建一个组件来处理此类问题
export class AppTextMultiLine extends React.PureComponent {
render() {
const textArray = this.props.value.split('\n');
return (
<View>
{textArray.map((value) => {
return <AppText>{value}</AppText>;
})}
</View>
)
}}
简单使用反引号(ES 6 特性)
解决方案 1
const Message = 'This is a message';
<Text>
{`
Hi~
${Message}
`}
</Text>
解决方案 2 在文本中添加“\n”
<Text>
Hi~{"\n"}
This is a message.
</Text>
React 不会喜欢您将 HTML <br />
放在它期望文本的位置,并且 \n
并不总是呈现,除非在 <pre>
标记中。
也许将每个换行字符串(段落)包装在一个 <p>
标记中,如下所示:
{text.split("\n").map((line, idx) => <p key={idx}>{line}</p>)}
如果您正在迭代 React 组件,请不要忘记 key
。
这样做:
<Text>
{ "Hi~ \n this is a test message." }
<Text/>
这是一个很好的问题,您可以通过多种方式解决这个问题 第一个
<View>
<Text>
Hi this is first line {\n} hi this is second line
</Text>
</View>
这意味着您可以使用 {\n} 反斜杠 n 来换行
第二
<View>
<Text>
Hi this is first line
</Text>
<View>
<Text>
hi this is second line
</Text>
</View>
</View>
这意味着您可以在第一个 <View> 中使用另一个 <View> 组件并将其包裹在 < 文本>组件
快乐编码
如果您从 state variable or props
获取数据,Text 组件有一个带有 minWidth、maxWidth 的样式属性。
例子
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>
这会将文本显示为屏幕宽度的 50%
此代码适用于我的环境。 (反应本机 0.63.4)
const charChangeLine = `
`
// const charChangeLine = "\n" // or it is ok
const textWithChangeLine = "abc\ndef"
<Text>{textWithChangeLine.replace('¥n', charChangeLine)}</Text>
结果
abc
def
嘿,像这样放它们对我有用!
<div> <p style={{ fontWeight: "bold", whitespace: "pre-wrap" }}> {" "} Hello {"\n"} </p> {"\n"} <p>I am here</p> </div>
我使用 p 标签 作为新行。所以我在这里粘贴了代码。这对任何人都有帮助。
const new2DArr = associativeArr.map((crntVal )=>{
return <p > Id : {crntVal.id} City Name : {crntVal.cityName} </p>;
});
有时候我是这样写的:
<Text>
You have {" "}
{remaining}$ {" "}
from{" "}
{total}$
<Text>
(因为我自己看起来更清楚)
2021,这适用于 REACT 状态值 (您必须添加空 div,就像 return 语句一样)
this.setState({form: (<> line 1 <br /> line 2 </>) })
解决方案 1:
<Text>
Hi~{"\n"}
this is a test message.
</Text>
解决方案 2:
<Text>{`
line 1
line 2
`}</Text>
解决方案 3:
这是我处理多个 <br/>
标签的解决方案:
<Text style={{ whiteSpace: "pre-line" }}>
{"Hi<br/> this is a test message.".split("<br/>").join("\n")}
</Text>
解决方案 4:
使用maxWidth
自动换行
<Text style={{ maxWidth:200}}>this is a test message. this is a test message</Text>
最好的方法是使用 UL 或 OL 之类的列表,并进行一些样式设置,例如制作列表样式 none,然后您可以使用 <li> dhdhdhhd </li>
我知道这已经很老了,但我想出了一个自动换行的解决方案,它允许您以通常的方式传递文本(没有诡计)
我创建了以下组件
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;
那你就可以这么用了..
<MultiLineText style={styles.text}>This is the first line\nThis is teh second line</MultiLineText>
这应该可以解决问题![=11=]
<Text style={{styles.text}}>{`Hi~\nthis is a test message.`}</Text>