ReactDOMServer - 如何使用 renderToString 方法忽略 trans-pile 一些值
ReactDOMServer - how to ignore trans-pile some values with renderToString method
有时候,我想忽略 renderToString 中的 trans-pile。
我正在使用 React 作为模板引擎来生成模板的基础(html、header、body)。我需要注入一个值(json object 作为字符串,用 JSON.stringify 转换)才能在浏览器上作为全局变量访问它。
这是我的模板组件:
export default function (props) {
return (
<html>
<head>
<meta charSet="utf-8"/>
</head>
<body className="rtl">
<div id="app-root"></div>
<script>
myValue = {JSON.stringify(props.obj)}
</script>
</body>
</html>
);
}
这是渲染和传递值的地方:
let template = <Template obj={obj}/>;
template = ReactDOMServer.renderToString(template);
template = '<!DOCTYPE html>' + template;
res.status(status).send(template);
在 运行 之后,'myValue' 是未定义的,因为 renderToString 插入插入为 HTML 注释并且还像这样更改数据结构(转换字符):
<script>
myValue = <!-- -->{"a":"a","b":"b"}
</script>
如何解决?
试试这个 https://zhenyong.github.io/react/tips/dangerously-set-inner-html.html。
像这样:
<script dangerouslySetInnerHTML={JSON.stringify(props.obj)} />
有时候,我想忽略 renderToString 中的 trans-pile。
我正在使用 React 作为模板引擎来生成模板的基础(html、header、body)。我需要注入一个值(json object 作为字符串,用 JSON.stringify 转换)才能在浏览器上作为全局变量访问它。
这是我的模板组件:
export default function (props) {
return (
<html>
<head>
<meta charSet="utf-8"/>
</head>
<body className="rtl">
<div id="app-root"></div>
<script>
myValue = {JSON.stringify(props.obj)}
</script>
</body>
</html>
);
}
这是渲染和传递值的地方:
let template = <Template obj={obj}/>;
template = ReactDOMServer.renderToString(template);
template = '<!DOCTYPE html>' + template;
res.status(status).send(template);
在 运行 之后,'myValue' 是未定义的,因为 renderToString 插入插入为 HTML 注释并且还像这样更改数据结构(转换字符):
<script>
myValue = <!-- -->{"a":"a","b":"b"}
</script>
如何解决?
试试这个 https://zhenyong.github.io/react/tips/dangerously-set-inner-html.html。 像这样:
<script dangerouslySetInnerHTML={JSON.stringify(props.obj)} />