React 16 警告“warning.js:36 警告:没想到服务器 HTML 在 <div> 中包含 <div>。”

IT技术 reactjs react-fiber
2021-05-17 04:07:08

我正在使用 React 16 beta (react-fiber) 和服务器端渲染

我要理解这意味着什么?

warning.js:36 Warning: Did not expect server HTML to contain a <div> in <div>.
3个回答

只需更改来自

<body>
    <div id="root">
        ${markup}
    </div>
</body>

<body>
    <div id="root">${markup}</div>
</body>

删除标签之间的空格

在react代码中寻找该错误似乎是在 SSR html 无法再水化时发生的。

https://github.com/facebook/react/blob/7a60a8092144e8ab2c85c6906dd4a7a5815cff1f/src/renderers/dom/fiber/ReactDOMFiberComponent.js#L1022

因此,您最初以某种方式在客户端和服务器上呈现不同的树。

我在 Next.js 中使用 Modal 时遇到了同样的警告。我正在努力在主页上创建一个弹出窗口。

我找到了解决办法。如果模态显示状态首先变为真,则会产生此警告。所以我先将它设为 undefined 然后在页面呈现后将其设为 true 。代码如下。

 const [modalShow, setModalShow] = React.useState();
  useEffect(() => {
    if ( modalShow === undefined ) {
      setModalShow(true)
    }
  }, [modalShow])