Javascript 将React组件添加到由DangerouslySetinerHTML设置的HTML中
我从服务器接收HTML,需要通过Javascript 将React组件添加到由DangerouslySetinerHTML设置的HTML中,javascript,reactjs,Javascript,Reactjs,我从服务器接收HTML,需要通过DangerouslySetinerHTML注入。在插入HTML之后,我想得到一个id为:home\u content的DOM元素 这是因为我从遗留应用程序(服务器端呈现的HTML)迁移到React,遗留应用程序返回HTML。此React组件的目标是将HTML从遗留应用程序解析为React组件。在这个组件中,我想将React组件添加到从服务器接收的初始HTML结构中 export default function App() { const [data, se
DangerouslySetinerHTML
注入。在插入HTML之后,我想得到一个id为:home\u content
的DOM元素
这是因为我从遗留应用程序(服务器端呈现的HTML)迁移到React,遗留应用程序返回HTML。此React组件的目标是将HTML从遗留应用程序解析为React组件。在这个组件中,我想将React组件添加到从服务器接收的初始HTML结构中
export default function App() {
const [data, setData] = useState({});
const [isLoading, setIsLoading] = useState(true);
const didMountRef = useRef(false);
const pageName = useSetPageTitle();
// Will be replaced by the actual API call, Add to legacy component
useEffect(() => {
const fetchData = async () => {
const response = await fetch(
`http://127.0.0.1:8000/nav?action=${pageName}`
);
const legacyHTML = await response.text();
setData(legacyHTML);
setIsLoading(false);
};
fetchData();
didMountRef.current = true;
}, [pageName]);
useEffect(() => {
if(didMountRef.current) {
const domContainer = document.querySelector("#home_content");
ReactDOM.render(<LikeButton />, domContainer);
}
}, [didMountRef]);
return (
<>
<LegacyDependencies />
<div>
<div id="content"></div>
{isLoading ? (
<div>
<span>loading...</span>
</div>
) : (
<div
dangerouslySetInnerHTML={{
__html: data,
}}
/>
)}
</div>
</>
);
}
导出默认函数App(){
const[data,setData]=useState({});
const[isLoading,setIsLoading]=useState(true);
const didMountRef=useRef(false);
const pageName=useSetPageTitle();
//将替换为实际的API调用,添加到遗留组件
useffect(()=>{
const fetchData=async()=>{
const response=等待获取(
`http://127.0.0.1:8000/nav?action=${pageName}`
);
const legacyHTML=wait response.text();
setData(legacyHTML);
设置加载(假);
};
fetchData();
didMountRef.current=真;
},[pageName]);
useffect(()=>{
if(参考电流){
const domContainer=document.querySelector(“主内容”);
render(,domContainer);
}
},[didMountRef]);
返回(
{孤岛加载(
加载。。。
) : (
)}
);
}
我收到以下错误:错误:目标容器不是DOM元素。
是否可以将React组件添加到由
危险的LysetinerHTML
插入的HTML中 以下是您可以做到的方法
const{useRef,useState,useffect}=React;
const getData=()=>Promise.resolve('Test')
常量LikeButton=()=>Like!
常量应用=()=>{
const ref=useRef();
const[data,setData]=useState(“”);
useffect(()=>{
让isUnmounted=false
getData()
.然后(pr=>{
如果(已卸载){
返回
}
setData(pr);
})
return()=>{
isUnmounted=true;
}
}, []);
useffect(()=>{
常量元素=ref&&ref.current;
if(元素){
const content=document.getElementById(“内容”);
如果(内容){
ReactDOM.render(,content);
}
}
},[ref,data])
返回
}
ReactDOM.render(
,
document.getElementById('root'))
);代码>
希望这有帮助==>@Mohit这并没有回答这个问题。您在问是否可以添加React组件,因为我共享了链接,因为您从服务器获得的html应该是正确的,并且可以插入。您的示例显示了如何在React组件中解析html。问题是如何通过dangerlysetinerhtml
将React组件添加到插入的HTML中仔细阅读,您需要使用_HTML属性传递React组件/HTML。