React:如何将 React 组件注入到 body 中?

新手上路,请多包涵

我有一个要注入 DOM 的 React 组件。这是因为我的 JS 将由其他网站所有者通过脚本标签加载,而不是加载到我控制的 SPA 上。

我想要做的是将我的 Root 组件附加到网页的 body 中。

如果我这样做,那么它会替换掉我体内的所有内容,这不是我想要的。

 import React from "react";
import ReactDOM from "react-dom";

class Root extends React.Component {
  render() {
    return <div>heyyyyyyy</div>;
  }
}

if (!module.parent) {
    ReactDOM.render(<Root />, document.querySelector("body")); // <-- wrong
}

我想要类似 document.querySelector("body").appendChild(<Root />) 的东西。这可能吗?

原文由 bigpotato 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

如果您选择单线:

 ReactDOM.render(
  <Root />,
  document.body.appendChild(document.createElement("DIV"))
)


运行示例:

 class Root extends React.Component {
  render() {
    return <div>It works!</div>;
  }
}

ReactDOM.render(
  <Root />,
  document.body.appendChild(document.createElement("DIV"))
)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.0.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.0.0/umd/react-dom.production.min.js"></script>

<body></body>

原文由 alegria 发布,翻译遵循 CC BY-SA 4.0 许可协议

创建根元素并自己将其附加到 DOM

 const rootEl = document.createElement('div')

document.body.appendChild(rootEl)

class Root extends React.Component {
  render () {
    return <div>heyyyyyyy</div>
  }
}

ReactDOM.render(
  <Root />,
  rootEl
)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div>don't replace me</div>

原文由 Damon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题