我正在从 JSON 文件中获取本地化文本并将其显示到页面,我的问题是n
和<br>
表示法被忽略了。
我在这里制作了一个代码沙箱来展示文本如何不放在多行上。
import * as React from "react";
import { render } from "react-dom";
const App: React.FC = props => {
const Translations: {
[key: string]: {
fname: string;
};
} = {
en: {
fname: "I want to insert a break in this line of text so it shows on two lines n doesnt work and <br> does either",
},
cn: {
fname: "我想在这一行文本中插入一个中断,以便在两行中显示 n不起作用,而<br>可以",
}
};
const txt = Translations["en"];
return (
<div className="App">
<p>{txt.fname}</p>
</div>
);
};
const rootElement = document.getElementById("root");
render(<App />, rootElement);
为了尊重n
,可以添加white-space: pre-line
或white-space: pre-wrap
的样式。
在 React 中,它看起来像这样:
return (
<div className="App">
<p style={{ whiteSpace: "pre-line" }}>{txt.fname}</p>
</div>
);
这是一个分叉的沙盒。
使用 CSS 属性white-space: pre-line
<p style={{ whiteSpace: "pre-line" }}>{txt.fname}</p>
您可以使用dangerouslySetInnerHTML
,但是请确保使用像DOMPurify这样的smth来清理您的输入:
return (
<div className="App">
<p
dangerouslySetInnerHTML={{
__html: txt.fname
}}
/>
</div>
);
如评论中所述,另一种方法是将<br>
替换为n
并添加whiteSpace: "pre-line"
css规则:
return (
<div className="App">
<p style={{ whiteSpace: "pre-line" }}>
{txt.fname.replace("<br>", "n")}
</p>
</div>
);
工作沙盒。
你总是可以使用JSX代替 - 它看起来像这样
en: {
fname: <p>"I want to insert a break in this line of text so it shows on two lines n doesnt work and <br> does either"</p>
}
return (
<div className="App">
{txt.fname}
</div>
);