假设我有一个包含换行符的文本字符串,我将其渲染为:
render() {
var text = "One\nTwo\nThree";
return <div>{text}</div>;
}
在HTML中,换行符不呈现为换行符。我应该如何在React中做到这一点?我不想转换为<br>标签并使用dangerouslySetInnerHTML。还有另一种方法吗?
假设我有一个包含换行符的文本字符串,我将其渲染为:
render() {
var text = "One\nTwo\nThree";
return <div>{text}</div>;
}
在HTML中,换行符不呈现为换行符。我应该如何在React中做到这一点?我不想转换为<br>标签并使用dangerouslySetInnerHTML。还有另一种方法吗?
Answers:
您可以尝试为每行放置div
render() {
return (<div>
<div>{"One"}</div>
<div>{"Two"}</div>
<div>{"Three"}</div>
</div>);
}
要么
render() {
var text = "One\nTwo\nThree";
return (
<div>
{text.split("\n").map((i,key) => {
return <div key={key}>{i}</div>;
})}
</div>);
}
<MultilineText>它来做一个组件!
<div>格式来设置文本行?<p>在语义上似乎更正确。
新建一个CSS类
.display-linebreak {
white-space: pre-line;
}
使用该CSS类显示文本
render() {
const text = 'One \n Two \n Three';
return (
<div className="display-linebreak">
{text}
</div>
);
}
带有换行符的渲染(空白序列将折叠为单个空白。必要时文本将换行)。像这样:
One
Two
Three
您也可以考虑进行预包装。更多信息在这里(CSS空白属性)。
您可以使用CSS属性“ white-space:pre”。我认为这是处理此问题的最简单方法。
white-space:pre与white-space:nowrap我的效果相同,即文本溢出了容器。使用white-space:pre-wrap代替解决了这个问题。
white-space: pre-line;代替。
这里是最干净的解决方案(afaik):
render(){
return <pre>
Line 1{"\n"}
Line 2{"\n"}
Line 3{"\n"}
</pre>
}
而不是您也可以使用<div style={{whiteSpace:"pre"}}>或任何其他html块元素(例如span或p具有此style属性)
您可以-webkit-user-modify: read-write-plaintext-only;在div中使用。例如,它将格式化并理解\ n和\ p之类的内容。
<br>,那可能是问题所在。我注意到JS Transformer不喜欢它,除非您使用<br/>HTML 4版本。