Javascript 将React组件添加到由DangerouslySetinerHTML设置的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

我从服务器接收HTML,需要通过
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。