发布于 2026-01-06 4 阅读
0

在 React 或 Vue 组件中渲染文本时,要让换行符生效。

在 React 或 Vue 组件中渲染文本时,要让换行符生效。

有时,你会在 React 组件中收到一个无法控制的字符串(例如来自 CMS 或 API 的字符串)。它可能看起来像这样:

"Wow I am so cool \n I'm a JavaScript haiku \n render my newlines"
Enter fullscreen mode Exit fullscreen mode

\n但是,如果你像这样把它放到 React(或 Vue)组件中,这些小字符就不会被识别:

const haiku = "Wow I am so cool \n I'm a JavaScript haiku \n render my newlines"

function BeautifulHaiku() {
  return <div>{haiku}</div>
}
Enter fullscreen mode Exit fullscreen mode

如果你想改变这种行为并获得你想要的换行符,你有几个不错的选择。

替换\n<br />

首先,你可以将字符串拆分,然后渲染生成的<br />标签。

function replaceWithBr() {
  return haiku.replace(/\n/g, "<br />")
}
Enter fullscreen mode Exit fullscreen mode

在 React 中,你可以使用dangerouslySetInnerHTML它来实现这一点:

<p dangerouslySetInnerHTML={{__html: replaceWithBr()}} />
Enter fullscreen mode Exit fullscreen mode

(之所以称之为“危险”,并非因为 React 团队想显得很酷,而是因为你必须小心在其中输入的内容,以避免恶意脚本。)

在 Vue 中,你可以使用v-html以下方法来实现这一点:

<p v-html="replaceWithBr()">{{haiku}}</p>
Enter fullscreen mode Exit fullscreen mode

使用 CSSwhite-space

另一种方法是使用white-spaceCSS 属性并将其设置为pre-wrappre-line

.css-fix {
  white-space: pre-wrap; /* or pre-line */
}
Enter fullscreen mode Exit fullscreen mode

这两个功能确保文本在内容中出现换行符时自动换行,并且pre-line专门将多个空格合并为一个空格。

这同样适用于 React 和 Vue!

证明给我看,卡西迪

好吧,那就逼我吧!

以下是 React 的实际应用示例:

以下是 Vue 的示例!

“他们性格不同,但他们是朋友”——DJ Khaled

坦白说:我不是 Vue 开发者,这只是我尝试时碰巧成功了而已。我知道这在 React 里是“正确”的做法,但我对 Vue 还不太了解,因为我是个新手。祝你好运,玩得开心,做出正确的选择,待人友善,好好写代码。

希望这对您有所帮助!

文章来源:https://dev.to/cassidoo/make-line-breaks-work-when-you-render-text-in-a-react-or-vue-component-4m0n