reactjs - 将 createContextualFragment 与 JSX 一起使用
问题描述
我试图在 JSX 中包含一个“上下文组件”,我做错了什么?
请注意,我需要运行脚本,因此不提供危险的 SetInnerHTML 选项。另外我想构建一个函数组件以与钩子一起使用。
export default function ContextualComponent() {
const node = document.createRange().createContextualFragment("<div>My html and scripts</div>");
return (
<div>{node}</div>
);
}
解决方案
对于与 DOM 的任何直接交互,您需要一个 React ref。你想要的可以用useRef
and来实现useEffect
:
const ContextualComponent = ({ html }) => {
const ref = useRef(null);
useEffect(() => {
const { current } = ref;
const documentFragment = document
.createRange()
.createContextualFragment(html);
current.appendChild(documentFragment);
return () => {
current.textContent = "";
};
}, [html]);
return <div ref={ref} />;
};
推荐阅读
- python - 用 Beautiful Soup 提取表中的所有链接
- javascript - JavaScript 布尔函数允许多次返回
- selection-sort - 为什么我的输出在选择排序中以错误的顺序打印?
- r - 为什么 rev(factor) 不能作为反转 dplyr::top_n() 的 wt 参数的一种方式?
- python - 如何从每个条目的 JSON 文件中提取数据?
- angular - Angular Material Datepicker 中没有导出成员 MatCalendarCellClassFunction
- css - 如何仅使用 CSS 创建带有过渡的可选渐变叠加文本?
- python - Python Pandas:按多列对数据框进行排序,但排序顺序不同
- model - 我的应用程序需要一个长度为 32 个字母数字字符的 model_id,而我得到的所有标签都是像“General”这样的标签
- jquery - 如何使用epplus通过ajax调用返回excel文件