\n 未在新行中呈现文本

9 javascript reactjs

我有一些动态 JSON 字符串,如下所示:

Status is unknown\nThe combination is excluded by the following restriction\nRestriction number 2. 01 Mar 12 08:03:01 0--Exclusion--OrderDeliveryTimeframe.equals(\"oneMonth\") && OrderShipping.equals(\"air\")\n\n
Run Code Online (Sandbox Code Playgroud)

因此,当我打印与输出相同的内容时,\n不会在新行中渲染文本。所以我写了下面的代码:

return <div>
  {item.intro.replace(/[\n \n\n]/g, "\n")}
     <br/>
Run Code Online (Sandbox Code Playgroud)

现在的问题是 - 它在遇到第一次出现 后渲染下一行中的文本\n,但之后不再渲染。它也不适用于\n\n. 我想我错过了一些东西。有人可以帮我解决这个问题吗?提前致谢。

T.J*_*der 18

\n不是 HTML 中的换行符,它只是一个空格。HTML 中的任何一系列空白字符都被视为一个空格。

其中的 React 部分是如何使用br元素来做你想做的事情。

最简单的方法是告诉div不同地对待空白,正如这个问题的答案中所讨论的

return <div style={{whiteSpace: "pre-line"}}>
    {item.intro}
</div>;
Run Code Online (Sandbox Code Playgroud)

或者您可以使用元素换行,例如 adivp

return <div>
    {item.intro.split(/\n/).map(line => <div key={line}>{line}</div>)}
</div>;
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要br行之间的元素,您可以使用片段:

return <div>
    {item.intro.split(/\n/).map(line => <React.Fragment key={line}>{line}<br/></React.Fragment>)}
</div>;
Run Code Online (Sandbox Code Playgroud)

(我们不能使用速记<>___</>形式,因为它们不支持键。)

但我不喜欢最后一个,因为它以<br/>. 你可以解决这个问题,但它更复杂:

return <div>
    {item.intro.split(/\n/).map((line, index) => index === 0 ? line : <React.Fragment key={line}>{line}<br/></React.Fragment>)}
</div>;
Run Code Online (Sandbox Code Playgroud)