如何将 /n 替换为 react.js 中的换行符?

Jim*_*ers 12 javascript ecmascript-6 reactjs

我想,以取代每/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>
    )
  })
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*ats 41

另一种方法是使用 css 以换行符显示它。这也使复制和粘贴原始换行符以及区分一个中断 ( \n) 和两个中断 ( \n\n)变得更容易。

只需将样式添加white-space: pre-wrap;到您的元素中即可。

<div style={{whiteSpace: "pre-wrap"}}>{note.note}</div>
Run Code Online (Sandbox Code Playgroud)

如果这不能完全满足您的要求,还有其他空白选项:https : //developer.mozilla.org/en-US/docs/Web/CSS/white-space

  • 好多了; 已经有一个 CSS 解决方案可以做到这一点,并且构建一堆 DOM 元素来按原样呈现文本字符串,在我看来是矫枉过正了 (5认同)

tom*_*rod 20

您的代码运行良好:

{
    note.note.split("\n").map(function(item, idx) {
        return (
            <span key={idx}>
                {item}
                <br/>
            </span>
         )
    })
}
Run Code Online (Sandbox Code Playgroud)

笔记:

OP 问题在于后端返回\\n并显示\nXHR preview选项卡中


jp0*_*p06 5

我只是想分享这个我已经使用了一段时间的功能。它与 Jim Peeters 的答案类似,但没有生成父标签,只是将\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]
  })
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过省略 和 大括号将其转换为较长的一行return

export const escapedNewLineToLineBreakTag = (string) => string.split('\n').map((item, index) => (index === 0) ? item : [<br key={index} />, item])
Run Code Online (Sandbox Code Playgroud)

免责声明:背后的逻辑不是来自我,但我不记得在哪里找到它。我只是把它变成了函数形式。