我无法将 PreactX 组件直接渲染到 document.body

I can't render PreactX component directly into document.body

请看这个最小的例子:

或代码:

HTML

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    />
    <title>React App</title>
  </head>

  <body>
    <div id="root"></div>
  </body>
</html>

JS

/** @jsx h */
import { h, render } from "preact";

function App() {
  return <div className="App">Cool</div>;
}

render(<App />, document.body);

渲染结果是这样的:

结果

<body>
  <div id="root" class="App">Cool</div>
</body>

我想将 #root dom 元素留空,但 PreactX 接管了那个 dom 节点的控制权,为什么会这样?

我想直接将我的 PreactX 组件渲染成 document.body。

Preact 基本上是将 document.body (<div id="root"></div>) 的 原始内容 与新内容 <div className="App">Cool</div> 进行比较和合并,给你这个结果:

<div id="root" class="App">Cool</div>

如果您进入 public/index.html 并删除第 13 行:<div id="root"></div>,您将看到生成的 html 现在是:<div class="App">Cool</div>.

TLDR;您正在将 preact 挂载到 document.body,它已经有内容,并且 preact 正在将这些内容与您的 'App.js' 组件进行比较和合并。清空 index.html 中的 body 标签就可以了。