ReactDOM.createPortal() 在函数中调用时呈现空元素

ReactDOM.createPortal() renders empty element when called in a function

我有一个简单的 React.js 应用程序,它尝试在回调时在 Portal 中呈现内容,有人知道为什么它不呈现任何内容吗?

Runnable CodeSandbox

import React from 'react'
import ReactDOM from 'react-dom'
import './App.css';

function App() {
  const showElement = React.useCallback(() => {
    const element = document.createElement('div');
    document.querySelector('body').appendChild(element)
    ReactDOM.createPortal(() => <div>TEST</div>, element)
  }, [])
  
  return (
    <div className="App">
      <button onClick={showElement}>Click to Render Portal</button>
    </div>
  );
}

export default App;

您没有 return 在 App 组件的 return 中创建门户,因此它实际上没有被渲染。

尝试更像:

function App() {
  const elementRef = useRef(document.createElement("div"));

  const showElement = React.useCallback(() => {
    document.querySelector("body").appendChild(elementRef.current);
  }, []);

  return (
    <div className="App">
      <button onClick={showElement}>Click to Render Portal</button>
      {ReactDOM.createPortal(<div>TEST</div>, elementRef.current)}
    </div>
  );
}

这会创建一个 React ref 来保存创建的 DOM 元素,使用组件 JSX 的 return 呈现门户,并在按钮的 [=] 中附加 DOMNode 12=]处理程序。