2016-04-26 8 views
3

上位コンポーネントを記述したいと思います。たとえば、AddMarkupという子要素が1つあります。子をそれを生成するコードとともにレンダリングする必要があります。たとえば:JSXを文字列として取得するにはどうすればよいですか?

<AddMarkup> 
    <MyButton color="red"> 
    Red Button 
    </MyButton> 
</AddMarkup> 

はこのようなものになるはずである:私は<pre>ビットに苦しんだ

<div> 
    <button style={{ color: 'red' }}> /* Assume that MyButton is implemented this way */ 
    Red Button 
    </button> 
    <pre> 
    <MyButton color="red"> 
     Red Button 
    </MyButton> 
    </pre> 
</div> 

。元のJSXを文字列として取得する方法はありますか(つまり、<pre>タグに入れることができます)。私が適用できるバベルやウェブパックの魔法はありますか?

+0

これは難しい問題です。 React要素の結果からそのJSX文字列表現への「逆転」する簡単な解決策があるかどうかはわかりません。おそらくReact devツールのレポにインスピレーションを得て、コンソールにjsxがどのように表示されているのか、[Node.js](https://github.com/facebook/react-devtools/blob/master/frontend/ Node.js)ファイル? – Pcriulan

+0

おそらく、[jsx-to-string](https://www.npmjs.com/package/jsx-to-string)はBabelプラグインを使って奇妙な方法で接続されている可能性があります。いくつかの規約( 'props.childrenAsString'?)を定義し、** jsx-to-string **を通して処理している間にBabelに一致するコードを生成する必要があります。この後、あなたのコードは、特にクールではないカスタムのBabelプラグインと結婚します。 –

+0

@bebrawええ、 'jsx-to-string'はおそらく良いスタートです。回答として投稿してください;) –

答えて

1

これを解決する最良の方法は、変換を処理するためにjsx-to-stringに依存するカスタムのBabelプラグインを作成することです。あなたはchildrenAsStringのようなあらかじめ定義されたprop(プラグイン設定)を通してコードを文字列として注入するコードを書く必要があります。

これはうまくいくが、あなたのコードをBabelに結びつけるだろう。それでも、あなたがそれを必要としていて、あなたが落ち着きに満足しているなら、それは価値があるかもしれません。

関連する問題