【问题标题】:Can insert React JSX <Link> with innerHTML method?可以使用 innerHTML 方法插入 React JSX <Link> 吗?
【发布时间】:2020-09-06 02:13:23
【问题描述】:

我的 react 应用中有一些 html (JSX),如下所示:

<div><h3>Title</h3><p> some message...</p></div>

然后我使用 innerHTML 将它分配给一个名为 msg 的变量,如下所示:

let msg
msg.innerHTML = "<div><h3>Title</h3><p> some message...</p></div>"
//then i append it to my app like this
document.body.appendChild(msg)

现在我想用一个像这样的原生 React Link 元素包围上面的 html

msg.innerHTML = "<Link to"/"><div><h3>Title</h3><p> some message...</p></div></Link>"

当然它不起作用,当它被渲染到页面时它被编译为常规 html 并且不充当反应链接

我怎样才能做到这一点,甚至有可能还是有完全不同的方法来解决这个问题?

我尝试过这样做和许多不同的变化,但没有雪茄:

msg.innerHTML = `${<Link to"/">}<div><h3>Title</h3><p> some message...</p></div>${</Link}`

【问题讨论】:

    标签: javascript reactjs innerhtml


    【解决方案1】:

    ReactDOMServer.renderToString 会将 React 元素呈现为其初始 HTML。

    ...
    import ReactDOMServer from "react-dom/server";
    
    export default function App() {
      useEffect(() => {
        const msg = document.createElement("div");
        msg.innerHTML = ReactDOMServer.renderToString(
          <Link to="/">
            <div>
              <h3>Title</h3>
              <p> some message...</p>
            </div>
          </Link>
        );
    
        document.body.appendChild(msg);
      }, []);
    
      return null;
    }
    

    【讨论】:

    • 这段代码很有帮助。它可以工作,除了我设置的这个元素的 onclick 状态没有得到更新。
    • 请详细说明您的问题,您没有提到您有事件监听器。或者提供一个代码框,以便我们查看您的实际代码。
    • 是的,我有一个事件监听器,当点击它时,它会设置“已添加”的状态,这会导致所有带有 state: added 的元素出现在这个新页面上。但是使用您提供的这个链接,它会进入页面,但不会设置状态。
    • 你在Link 组件上有onClick
    猜你喜欢
    • 2010-11-14
    相关资源
    最近更新 更多