[英]Render HTML DOM Node in React Component
我使用 Wordpress 作为我的 CMS,并在 React 中创建一些页面并渲染它。 我有一个用例,我需要在我的 React 组件内渲染 HTML DOM 节点。 我在 querySelector() 的帮助下获取了 DOM 节点,它返回了 DOM 节点。 在 React 中,我尝试使用 React.createElement 来渲染它。 但它在我的页面上呈现为 [object HTMLDivElement]。
render() {
const { reactPages } = this.props;
const innerPages = React.createElement('div', {id: "myDiv"}, `${reactPages.children[0]}`);
return (
<div className="react-cmp-container">
<h3>React Container</h3>
{ innerPages }
</div>
)
}
}
我尝试的另一件事是使用危险的SetInnerHTML:
rawMarkUp = () => {
const { reactPages } = this.props;
return {__html: reactPages}
}
render() {
const innerPages = React.createElement('div', {id: "myDiv"}, )
return (
<div className="react-cmp-particle-container">
<h3>React Particle Container</h3>
<div dangerouslySetInnerHTML={this.rawMarkUp()}></div>
</div>
)
}
不建议这样做。 以后可能会带来很多麻烦。 反正, ...
querySelector()
返回一个DOM-element
(或此类元素的集合)。
React.createElement
React.createElement
不起作用,因为它需要另一个React.Element
或string
,而不是DOM-element
。
dangerouslySetInnerHTML
dangerouslySetInnerHTML
不起作用,因为它需要 HTML字符串,而不是DOM-element
。
您可以使用domElement.innerHTML
并将 HTML 字符串放入dangerouslySetInnerHTML
,但这可能无法代表您想要的 DOM 元素。
useRef
您可以将ref
添加到由 React 呈现的某些元素。 这使您可以访问相应的DOM-element
(由 React 呈现) ,并且您可以使用普通 DOM 方法注入您的DOM-element
(由querySelector()
返回) 。
这会使 React 无法“跟踪正在发生的事情”,并且您可能会遇到不一致的 state 和难以理解的错误。
例如:
export const StaticHtml = (props)=>{
const ref = useRef();
useEffect(() =>{
var elm = document.getElementById('some-static-html');
ref.current.appendChild(elm);
}, []);
return (<div ref={ ref }>
some div
</div>);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.