【发布时间】:2022-12-13 08:41:15
【问题描述】:
我做了一个函数,它以编程方式为 React 17 创建模态,你只需要调用一个函数来创建一个新的模态。
它在之前工作得很好ReactDOM.render已弃用。
有没有办法代替React 18 中的渲染函数和其他东西?现在的创建根函数仅针对根组件,我想在指定的 DOM 元素中渲染简单的组件。
它是这样工作的:
应用程序.jsx
<button onClick={() => createModal(<h1>I'm a component inside a modal</h1>)}>Open Modal</button>
它处理它自己的状态,如果你想在几秒钟内制作一堆模态,这非常有用。
这是代码:
索引.js=> 这是容器。
import React from 'react'
import ReactDOM from 'react-dom'
import './index.scss'
import App from './App.jsx'
ReactDOM.render(
<React.StrictMode>
<div id="modal-container"></div> <- This is the container
<App />
</React.StrictMode>,
document.getElementById('root')
)
模态/Modal.jsx=> 模态组件。
import { useState } from 'react'
import './Modal.scss'
const Modal = ({ content }) => {
const [isOpen, setIsOpen] = useState(true)
if (isOpen) {
return (<>
<div className="modal-background" onClick={() => setIsOpen(false)} />
<div className="modal-content" >
{content}
</div>
<button onClick={() => setIsOpen(false)} className="close-button" >Close</button>
</>)
} else return null
}
export default Modal
模态/index.js=>调用函数:
import { render } from "react-dom"
import Modal from "./Modal"
const createModal = (content) => render(
<Modal key={Math.random()} content={content} />, document.getElementById("modal-container")
)
export default createModal
【问题讨论】:
-
您是否尝试过在 React 中使用“门户”概念?看起来与您要完成的任务非常相似。 reactjs.org/docs/portals.html
-
在你的情况下,你应该将这个
<div id="modal-container"></div>移动到rootdiv之上\public\index.html页面 -
感谢您的回复!不幸的是,它不起作用,无论我怎么做,createPortal 在将它与函数一起使用时都不会呈现任何内容。 :(
标签: reactjs react-hooks render simplemodal react-18