【问题标题】:ReactDOM.createPortal() renders empty element when called in a functionReactDOM.createPortal() 在函数中调用时呈现空元素
【发布时间】:2022-01-11 04:44:48
【问题描述】:

我有一个简单的 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;

【问题讨论】:

    标签: javascript reactjs react-hooks react-portal


    【解决方案1】:

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

    试试类似的东西:

    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 的返回来呈现门户,并将 DOMNode 附加到按钮的 onClick 处理程序中。

    【讨论】:

    • 感谢您很好地解释了为什么需要将其作为渲染的一部分返回,官方 React 文档中没有概述。
    猜你喜欢
    • 2010-12-23
    • 2022-10-13
    • 1970-01-01
    • 2020-08-21
    • 2017-07-31
    • 2021-09-02
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    相关资源
    最近更新 更多