[英]Add className attribute to dangerouslySetInnerHTML contents
如何为包含“hello world”的div
指定className
属性:
<div dangerouslySetInnerHTML={{__html: '<div>hello world</div>'}} />
一种方法是设置外部 div,如下所示:
<div dangerouslySetInnerHTML={{__html: '<div>hello world</div>'}} className='class-name'/>
然后在 css 风格的孩子:
.class-name div {
(css stuff here)
}
但我想将className
直接设置为带有 'hello world' 的div
编辑:向注入的 html 添加类名并不能解决问题,例如:
let content = '<div class="class-name">hello world</div>'
<div dangerouslySetInnerHTML={{__html: content}}
不起作用,因为如果多次使用相同的内容,则会发生 CSS 冲突(我正在使用带有 CSS 模块的样式加载器)
<div className="post-excerpt" dangerouslySetInnerHTML={{ __html: post.excerpt}}/>
2 年后我遇到了这个问题,我想达到完全相同的结果。 我在这里没有找到任何准确的答案,但由于@jash8506对这个问题的出色回答,我想出了一个解决方案。
我们必须使用两个反应钩子
根据文档, useRef
可用于访问 React 中的 DOM 元素, useLayoutEffect
可用于从 DOM 中读取布局并同步重新渲染。
我们可以访问firstChildElement
容器div
,并添加类到它的classList
这是完成的代码的样子
const containerRef = useRef();
useLayoutEffect(()=>{
if (containerRef.current){
containerRef.current.firstElementChild.classList.add('class-name');
}
});
return (
<div ref={elRef} dangerouslySetInnerHTML={{__html: '<div>hello world</div>'}} />
)
在继续阅读之前:问问自己为什么需要dangerouslySetInnerHTML
! 这并不意味着要使用,如果是这样,请使用消毒剂。
/* React with HTML context */
<div dangerouslySetInnerHTML={{__html: '<div class="class-name">hello world</div>'}} />
但是,您可以以安全的方式简化此操作:
/* React context only */
<div className="class-name">hello world</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.