ReactプロジェクトでLaTeX文字列をレンダリングしようとしています。 _react-mathjax
_ Reactコンポーネントを使用しますが、LaTeX文字列から作成されたHTML文字列を取得して、それと他の文字列を連結し、dangerallySetInnerHTMLで設定したいです。
サンプルコードはこちら: https://github.com/Nyoho/test-react-project/blob/component2string/src/components/tex.jsx
document.createElement('span')
によって空のDOM aDom
を作成します(ドキュメントDOMツリーではなく、バックグラウンドで。)ReactDOM.render
_によってLaTeX文字列をaDom
にレンダリングしますaDom.innerHTML
_または_.outerHTML
_で文字列を取得しますaDom
にはMathJaxが生成した完全なツリーがありますが、_aDom.innerHTML
_(または_.outerHTML
_)の値は_"<span><span data-reactroot=\"\"></span></span>"
_(ほとんど空)です。
簡単に言えば、
aDom
:????aDom.outerHTML
_:????aDom
および_aDom.outerHTML
_のスクリーンショットconsole.log
上記のaDom
から「正しい」HTML文字列を取得するにはどうすればよいですか?
コンポーネントをHTML文字列にレンダリングする場合、これはうまく機能するようです:
import { renderToString } from 'react-dom/server'
renderToString() {
return renderToString(<MyAwesomeComponent some="props" or="whatever" />)
}
私が見るものから、あなたはあなたがあなたが得ると期待するものを得ています。
ルート要素(あなたの場合はaDom
)が与えられると、ReactDOMはこの要素内にルートコンポーネントをレンダリングし、このコンポーネントの要素は属性data-reactroot
を持ちます。
ですから、あなたが見ているのは、それがどうあるべきかということです。私がテストしたことから、内部のdomツリーもそこにあるはずです。
var Another = React.createClass({
render: function() {
return (
<div>Just to see if other components are rendered as well</div>
);
}
});
var Hello = React.createClass({
render: function() {
return (
<div id="first">
<div id="sec-1">Hello</div>
<div id="sec-2">{ this.props.name }</div>
<Another />
</div>
);
}
});
var a = document.createElement('div');
ReactDOM.render(
<Hello name = "World" /> ,
a
);
console.log(a.outerHTML);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
コンソールの結果は次のとおりです。
<div><div data-reactroot="" id="first"><div id="sec-1">Hello</div><div id="sec-2">World</div><div>Just to see if other components are rendered as well</div></div></div>