reactjs - 在反应中使用容器的孩子作为孩子
问题描述
渲染组件时是否可以在 JSX 中使用 dom 元素作为子元素?我认为这解释了我正在尝试但无效的内容。
<div id="container">
<div>node 1</div>
<div>node 2</div>
</div>
const container = document.querySelector('#container');
ReactDOM.render(
<MyComponent>{container.children}</MyComponent>,
container
);
解决方案
是的,可以使用dangerouslySetInnerHTML
,但不推荐。
从文档:
dangerouslySetInnerHTML 是 React 在浏览器 DOM 中使用 innerHTML 的替代品。一般来说,从代码中设置 HTML 是有风险的,因为很容易无意中将您的用户暴露给跨站点脚本 (XSS) 攻击。所以,你可以直接从 React 中设置 HTML,但是你必须输入 dangerouslySetInnerHTML 并传递一个带有 __html 键的对象,以提醒自己这是危险的。
const {useState, useEffect} = React;
function App(){
const [html, setHtml] = useState('Loading...');
useEffect(()=>{
setHtml(document.querySelector('#container').innerHTML);
}, []);
return <div dangerouslySetInnerHTML={{__html: html}}/>;
}
ReactDOM.render(
<App/>,
document.querySelector('#app')
);
#container {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.5/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.5/umd/react-dom.production.min.js"></script>
<div id='app'></div>
<div id="container">
<div>node 1</div>
<div>node 2</div>
</div>
希望这可以帮助!
推荐阅读
- python - Django Listview 类方法
- python - 如何在 Python Dash 中的两个 dcc 组件之间留出空间?
- vue.js - 如何使用 v-for 显示背景图像?
- python - 如何从两个 ID 创建一个新 ID?
- haskell - 在haskell中自动解包/重新包装值的功能?
- python - 解压缩大文件 - Google Colab Notebook
- image - PDF 和 Word 提取覆盖在图像上的文本
- c# - 如果计算机上使用 DateTime.UtcNow 的日期错误,则日期错误
- python - 转换为列表理解
- java - Hibernate: Criteria & createSQLQuery: 如何得到正确的 JSON?