パッケージreact-mathjaxを使用して、React コンポーネントにいくつかの数学表記を含めています。
プロジェクトの特異性 (質問を簡単にするためにここでは説明しません) のため、このコンポーネントを文字列に変換し、.html を使用して div に html 文字列を挿入する必要がありますdangerouslySetInnerHTML
。
これはコンポーネントです:
import MathJax from "react-mathjax";
const Math = () => (
<MathJax.Provider>
<MathJax.Node inline formula="x=2" />
</MathJax.Provider>
);
何らかの理由で、それを使用して文字列に変換しようとするとReactDOMServer
機能しません(空の文字列が返されます):
const html = ReactDOMServer.renderToString(<Math />); // first attempt
const htmlStaticMarkup = ReactDOMServer.renderToStaticMarkup(<Math />); // second attempt
Math
コンポーネントを直接レンダリングすると機能します。コンポーネントをデフォルトの HTML タグでラップしMath
て文字列に変換すると、デフォルトの HTML タグが変換されます (ただし、Math
コンポーネントは無視されます)。したがって、デフォルトの HTML タグを変換するMath
コンポーネントにも問題はありません。ReactDOMServer
何か案が?
これは CodeSandbox を使用したデモです: https://codesandbox.io/s/Compentient-payne-uvww0?file=/src/App.js
これは完全なソースコードです:
import ReactDOMServer from "react-dom/server";
import MathJax from "react-mathjax";
const Math = () => (
<MathJax.Provider>
<MathJax.Node inline formula="x=2" />
</MathJax.Provider>
);
const CustomHtml = () => (
<span>
<Math />
<p>Common HTML</p>
</span>
);
const html = ReactDOMServer.renderToString(<CustomHtml />);
const htmlStaticMarkup = ReactDOMServer.renderToStaticMarkup(<CustomHtml />);
export default function App() {
return (
<>
<p>Using the Math component and some default HTML directly: </p>
<CustomHtml />
<p>Using the Math component and some default HTML tags as a string (ReactDOMServer.renderToString): </p>
<div dangerouslySetInnerHTML={{ __html: html }} />
<p>Using the Math component and some default HTML tags as a string (ReactDOMServer.renderToStaticMarkup): </p>
<div dangerouslySetInnerHTML={{ __html: htmlStaticMarkup }} />
</>
);
}