ReactJSは、改行なしのスペースを含む文字列をレンダリングします


87

&などの文字を含む可能性のある文字列を持つ小道具がいくつかあります。スペースも含まれています。すべてのスペースを 。に置き換えたい。

これを行う簡単な方法はありますか?この構文を使用してレンダリングすることはできないことに注意してください。

<div dangerouslySetInnerHTML={{__html: myValue}} />

最初にHTMLエンティティをマークアップに置き換える必要があるためです。私はこれをする必要はありません、それは低すぎるレベルのようです。

これを行う方法はありますか?


1
なぜこれが反応に関連しているのですか?
マルセロBezerra

1
あなたが何をしたいのかは完全には明確ではありません。すべてのスペースを単にに置き換えたい&nbspl;ですか、HTMLタグを文字通り表示したいですか、それとも他に何かしたいことはありますか?
ボジャングル

いつ myValueアクセスできるかによります。適切なライフサイクル関数でそれを待ち、それを解析し、parsed複数の解析を防ぐフラグを設定することができます。
David Hellsing 2014年

レンダリングする場合&nbsp; reactでdomにエスケープされていない場合は、このdangerouslySetInnerHTMLメソッドを使用する必要があります。javascriptを使用してスペースを&nbsp;に置き換える文字列を作成できるため、これを回避する方法は実際にはわかりません。しかし、dangerouslySetInnerHTMLメソッドを使用しないと、これらはreactによってエスケープされます。
マイクドライバー

回答:


233

&nbsp;HTMLエンティティを使用する代わりに、&nbsp;(U + 00A0ノーブレークスペース)を参照するUnicode文字を使用できます。

<div>{myValue.replace(/ /g, "\u00a0")}</div>

3
上記で使用しているUnicode文字は、フィッシングスキームによる悪用のため、ブラウザによってブラックリストに登録されていることに注意してください。kb.mozillazine.org/Network.IDN.blacklist_chars
Perry Tew

2
@BenAlpert良い点。はい。とても良い点です。IDNだけが私の知る限りアドレスします。
ペリーテュー

シンプルでありながら効果的。3年の投稿の後でもthx @ BenAplert。
YASH DAVE 2017

これは、他に何もしなかったときに私にとってはうまくいきました。助けてくれてありがとう!
davidawad

2
そのブラックリストは、HTMLコードではなく、ドメイン名に適用されます。
JW。

34

私はこれが古い質問であることを知っています、そしてこれはあなたが要求したことを正確に行いませんが、文字列を編集するよりも、あなたが達成したいことはおそらくCSSwhite-space: nowrap属性を使用してよりよく解決されます:

HTMLの場合:

<div style="white-space: nowrap">This won't break lines</div>

反応中:

<div style={{ whiteSpace: 'nowrap' }}>{myValue}</div>

ありがとうございました!これがより良い答えです。そして私の場合(折り返したくないリンクの束ですが、1行にもしたくない)、a :: after {content: '';を追加しました。white-space:normal}
チャドスティール

0

きれいなxmlを表示したい場合:

var str = "<test>\n\t\t<value>1</value>\n</test>\n".replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\t/g, "\u00a0").replace(/\n/g, '<br/>');
return (
    <div dangerouslySetInnerHTML={{__html: str}} ></div>
)

0

消えずにここに入力するのは非常に難しいので、誰もが見ることができるように少し空白を追加します。このタグ<nbsp />から空白を削除すると、Reactで改行しないスペースを使用できるようになります。

Reactは、このJSXタグをノーブレークスペースに変換します。奇妙な癖:これは、スペースを入れたいテキストと同じ行でも使用する必要があります。また、このタグが付いた改行しないスペースはReactにスタックされません。


動作しません:Warning: The tag <nbsp> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter
ロスアトリル

0

文字列間のスペースを削除するには、以下のコードが有効です。例: "afee dd"結果: "afeedd"

{myValue.replace(/ \ s + / g、 '')}

-4

つまり、この「Hello world」のような値があり、それはにあると言えますthis.props.value

あなたはこれを行うことができます:

var parts = this.props.value.split(" "), array = [];
for (var i=0; i<parts.length; i++){
  // add the string
  array.push(<span key={i * 2}>{parts[i]}</span>);
  // add the nbsp
  array.push(<span key={i * 2 + 1}>&nbsp;</span>);
}

// remove the trailing nbsp
array.pop();

return <div>{array}</div>;

jsbin

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.