2017-04-26 13 views
2

だから私はこのコードを与えられた:もちろんinnerHTMLのJSX形式を設定する方法

render() { 
    console.log(this.props, 'ey'); 
    const var1 = "<div className={{blahblah}} style={{width: '10px'}}>{textvar}</div>" 


    return (
    <div dangerouslySetInnerHTML={{ __html: `${var1}` }}> 
    </div> 
); 
} 

あくまで一例ですが、var1はしかし、1つは、それらをレンダリングすること、JSX形式のhtmlファイルの大きな塊でなければなりませんそれらは正規のhtmlに変換されません。

また、componentDidMountのrefを介してinnerHTMLを設定しようとしましたが、同じ問題が発生します。

これは、それがレンダリングする際にどのように見えるかです:

<div class="blahblah style="width: 10px"}}>the variable text</div> 

すべてのヘルプは大歓迎です。ありがとう!

+0

実際の質問は「なぜ」ですか。 "もちろん、ただの例"として、これは実際には十分ではありません - あなたは実際に何をしていますか?非常にしばしば解決策は「HTMLを使用せず、データを取得し、コンポーネントに適切に注入する」ことです。 –

+1

@ Mike'Pomax'Kamermansクライアントはこのようにしたいので、ページのいくつかのバージョンをどこかに格納し、別のコミットをプッシュすることなくそれらのファイル/データを更新するだけです。あなたはクライアントに主張しようとしたときにその気持ちを知っていますが、依然として彼らが望むことをやり遂げるのですか? :D –

+0

クライアントがそれほど柔軟性を必要とするならば、彼らのためにReactフレームワークを構築することになり、彼らはReactでプログラムすることを学ぶ必要があります....私はこの道を辿り、あなたはワーム。 –

答えて

2
あなたは(仕様により不正確というテンプレートリテラル) ES6 interpolated string literalsを使用するには、この操作を行う必要があり

<div dangerouslySetInnerHTML={{ __html: `${var1}` }}> 

しかし、これは単純に次のようになります。しかし

<div dangerouslySetInnerHTML={{ __html: var1 }}> 

、内側のためのあなたの文字列にhtmlの場合、必要なものがblahblahtextvarの変数の値を使用する場合は、補間された文字列リテラルを使用することができます。 ReactはJSXとして処理するのではなく、内側のhtmlを設定するだけなので、classNameの代わりにclassを使用する必要があることに注意してください。classNameはJSX専用です。

const var1 = `<div class=${blahblah}>${textvar}</div>`; 

クラスを使用している場合は、styleキーワードも使用する必要はありません。 CSSの幅を設定するだけです。

working example of the above on CodePenが表示されます。

+0

他の方法はありますか?はい、私はすでにこの解決策を検討していましたが、変数classnameを設定しようとするとどうなりますか?または何か私は関数を呼び出すか、イベントをバインドします。 –

+0

他の方法があります。あなたが達成しようとしていることを正確にあなたの質問で説明してください。また、いくつかのシナリオを理解したい場合は、新しいスタックオーバーフローの質問を作成してください。 –

関連する問題