__WEBPACK_IMPORTED_MODULE_1_react_dom___default.a.createPortal 不是函数

chr*_*lmo 6 javascript reactjs webpack react-dom

错误:

TypeError: __WEBPACK_IMPORTED_MODULE_1_react_dom___default.a.createPortal is not a function

Modal.js:14
  11 | 
  12 | 
  13 | function Modal(props) {
> 14 |   return ReactDOM.createPortal(JSX_MODAL, document.querySelector("#modal"));
  15 | }
  16 | 
  17 | 
Run Code Online (Sandbox Code Playgroud)

编码:

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

const JSX_MODAL = (
  <div className="ui dimmer modals visible active">  
    <div className="ui standard modal visible active">
      THIS IS SOME TEXT IN THE MODAL // add some UI features here
    </div>
  </div>
);

function Modal(props) {
  return ReactDOM.createPortal(JSX_MODAL, document.querySelector("#modal"));
}

export default Modal;
Run Code Online (Sandbox Code Playgroud)

在另一个组件的渲染函数中使用{Modal()}.

index.html(仅正文部分):

<body>
  <div id="root"></div>
  <div id="modal"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

依赖项:

"react": "^16.8.6
"react-dom": "^16.0.0-alpha.13",
Run Code Online (Sandbox Code Playgroud)

背景:

我正在尝试使用 React 门户将模式的内容渲染到它自己的 DOM 节点。我一直在关注本教程,它基本上提供了React Docs中所提供内容的简化概念证明。

我尝试过的:

我只能找到一个遇到类似问题的人的实例,他们能够通过安装 React > 16.3.0 版本来解决它。我正在运行 React 版本 16.8.6。

小智 17

我遇到了这个错误,尽管这是一个简单的修复。我曾说过:

import ReactDOM from 'react';
Run Code Online (Sandbox Code Playgroud)

代替:

import ReactDOM from 'react-dom';
Run Code Online (Sandbox Code Playgroud)

虽然它没有回答原始发布者的问题,但它可能会回答未来的开发人员。


Jul*_*006 9

我发现这可以工作并且 Chrome 控制台中没有警告:

import React from 'react'
import ReactDOM from 'react-dom/client'
import PortalReactDOM from 'react-dom'

//...

class Modal extends React.Component {
  //...

  render() {
    return PortalReactDOM.createPortal(this.props.children, this.el);
  }
}

//...
const root = ReactDOM.createRoot(appRootEl);
root.render(<Parent />);
Run Code Online (Sandbox Code Playgroud)

即,使用react-domcreatePortal和使用react-dom/clientcreatRoot