我正在使用包react-mathjax在 React 组件中包含一些数学符号。
由于项目的特殊性(为了简化问题,我不会在这里讨论),我需要将此组件转换为字符串并将 html 字符串注入到 div 中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
组件,它可以工作。如果我Math
用一些默认 HTML 标签包装组件并将其转换为字符串,则默认 HTML 标签会被转换(但Math
组件被忽略)。因此,该Math
组件也没有ReactDOMServer
转换默认 HTML 标记的问题。
任何想法?
这是一个使用 CodeSandbox 的演示:https ://codesandbox.io/s/competent-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 }} />
</>
);
}