我正在尝试将每个/n
替换为<br>
中的ReactJS
标记。在我的note.note
对象中,有一个字符串,其中包含多个/n
。
示例note.note: test\ntest\ntest
我在ReactJS
尝试了什么:
{
note.note.split('\n').map(function( item, idx) {
return (
<span key={idx}>
{item}
<br/>
</span>
)
})
}
答案 0 :(得分:12)
对此的一种替代方法是使用css并在其中显示换行符。这也使复制和过去原始换行符变得容易,并且可以区分一个换行符(\n
和两个换行符(\n\n
)。
只需将样式white-space: pre-wrap;
添加到您的元素即可。
<div style={{whiteSpace: "pre-wrap"}}>{note.note}</div>
如果其他选项不能完全满足您的需要,则还有其他空格选项:https://developer.mozilla.org/en-US/docs/Web/CSS/white-space
答案 1 :(得分:5)
您的代码效果很好:
{
note.note.split("\n").map(function(item, idx) {
return (
<span key={idx}>
{item}
<br/>
</span>
)
})
}
注意:强>
OP问题在于后端返回
\\n
并在\n
标签中显示为XHR preview
答案 2 :(得分:0)
另一种方法:
{
note.note.split('\n').map((item, idx) => {
return (
<span key={idx}>
{item}
<br/>
</span>
);
})
}
答案 3 :(得分:0)
我只想分享我已经使用了一段时间的功能。它类似于Jim Peeters的答案,但没有生成父标记,只是将c
更改为quill.scroll.length()
。
\n
您还可以通过省略<br key="<index here>" />
和花括号将其转换为较长的单线。
import React from 'react'
export const escapedNewLineToLineBreakTag = (string) => {
return string.split('\n').map((item, index) => {
return (index === 0) ? item : [<br key={index} />, item]
})
}
免责声明:背后的逻辑并非来自我,但我不记得在哪里找到它。我只是将其转换为函数形式。
答案 4 :(得分:0)
React较新版本的一点更新
{
note.note
.split('\n')
.map((item, idx) => {
return (
<React.Fragment key={idx}>
{item}
<br />
</React.Fragment>
)
})
}