改行を含むテキスト文字列があり、次のようにレンダリングするとします。
render() {
var text = "One\nTwo\nThree";
return <div>{text}</div>;
}
HTMLでは、改行は改行として表示されません。Reactでこれをどのように行う必要がありますか?<br>タグに変換して使用したくありませんdangerouslySetInnerHTML。別の方法はありますか?
改行を含むテキスト文字列があり、次のようにレンダリングするとします。
render() {
var text = "One\nTwo\nThree";
return <div>{text}</div>;
}
HTMLでは、改行は改行として表示されません。Reactでこれをどのように行う必要がありますか?<br>タグに変換して使用したくありませんdangerouslySetInnerHTML。別の方法はありますか?
回答:
各行にdivを配置してみてください
render() {
return (<div>
<div>{"One"}</div>
<div>{"Two"}</div>
<div>{"Three"}</div>
</div>);
}
または
render() {
var text = "One\nTwo\nThree";
return (
<div>
{text.split("\n").map((i,key) => {
return <div key={key}>{i}</div>;
})}
</div>);
}
<MultilineText>もそれからコンポーネントを作ることができると思います!
<div>テキスト行のフォーマットに使用するのですか?<p>より意味的に正しいようです。
新しいCSSクラスを作成する
.display-linebreak {
white-space: pre-line;
}
そのCSSクラスでテキストを表示する
render() {
const text = 'One \n Two \n Three';
return (
<div className="display-linebreak">
{text}
</div>
);
}
改行付きでレンダリングします(空白のシーケンスは単一の空白に折りたたまれます。テキストは必要に応じて折り返されます)。このような:
One
Two
Three
プレラップを検討することもできます。詳細はこちら(CSS空白プロパティ)。
CSSプロパティ「white-space:pre」を使用できます。これがこれを処理する最も簡単な方法だと思います。
white-space:prewhite-space:nowrap私と同じ効果がありました。つまり、テキストがコンテナからオーバーフローしました。white-space:pre-wrap代わりに使用してこれを解決しました。
white-space: pre-line;代わりに使用してください。
ここで最もクリーンなソリューション(afaik):
render(){
return <pre>
Line 1{"\n"}
Line 2{"\n"}
Line 3{"\n"}
</pre>
}
代わりに使うこともでき<div style={{whiteSpace:"pre"}}>、または(のような任意の他のHTMLブロック要素spanまたはpこのスタイル属性を持ちます)
<div style={{ whiteSpace: "break-spaces" }}> {JSON.stringify(state, null, " ")} </div>
<br>した場合、それが問題になる可能性があります。<br/>HTML 4バージョンを使用しない限り、JSTransformerはそれを気に入らないことに気づきました。