假设我有一个包含换行符的文本字符串,我将其渲染为:
render() {
var text = "One\nTwo\nThree";
return <div>{text}</div>;
}
在HTML中,换行符不会呈现为换行符。我应该如何在React中做到这一点?我不想转换为<br>
代码并使用dangerouslySetInnerHTML
。还有另一种方式吗?
答案 0 :(得分:148)
制作一个新的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
您也可以考虑预包装。更多信息在这里 http://www.w3schools.com/cssref/pr_text_white-space.asp
答案 1 :(得分:50)
您可以尝试为每行添加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>);
}
答案 2 :(得分:14)
你可以使用CSS属性&#34; white-space:pre&#34;。我认为这是解决这个问题的最简单方法。
答案 3 :(得分:2)
尝试一下,
render() {
var text = "One\nTwo\nThree";
return <div style={{whiteSpace: 'pre-line'}}>{text}</div>;
}
答案 4 :(得分:1)
这是最干净的解决方案(afaik):
render(){
return <pre>
Line 1{"\n"}
Line 2{"\n"}
Line 3{"\n"}
</pre>
}
而不是你也可以使用<div style={{whiteSpace:"pre"}}>
或任何其他html块元素(如span
或p
与此样式属性)
答案 5 :(得分:0)
在普通的html文本区域内呈现分隔的文本“我的第一行\我的第二行\ nWhatevs ...”。我知道它有效,因为我今天才使用它!如有必要,将文本区域设置为只读,并相应地设置样式。
答案 6 :(得分:0)
您可以在div中使用-webkit-user-modify: read-write-plaintext-only;
。它将格式化并理解例如\ n和\ p之类的东西。
答案 7 :(得分:0)
您可以使用html的textarea标签,以后可以将样式添加到textarea标签中。 它几乎解决了您所有的问题,包括换行符和制表符空格。 Cheerzz ...
例如: 您的渲染效果如下图
Connecting to broker..
Connected with result code 0
输出:
render() {
var text = "One\nTwo\nThree";
return <textarea>{text}</textarea>;
}
答案 8 :(得分:0)
对于这种类型的值,您可以安全地运行String.raw
。
const text = String.raw`One
Two
Three
`
render() {
return <div style={{ whiteSpace: "pre" }}>{text}</div>
}
您也可以只使用<pre>
标记,该标记可以有效地完成相同的操作,但是如果您已经将其用于应用程序中的其他用途,则在语义上不太清楚。
答案 9 :(得分:0)
<div style={{ whiteSpace: "break-spaces" }}> {JSON.stringify(state, null, " ")} </div>