老师,多次点击报错ReactDOM.createRoot重复绑定,请问怎么解决呢
来源:16-9 createPortal传送门与逻辑组件的实现

Panda_io
2023-05-29
Warning: You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it.
import ReactDOM from 'react-dom/client'
import './message.scss'
import { CSSTransition } from 'react-transition-group'
import { useRef, useState} from 'react'
function Message({ icon, text }) {
const nodeRef = useRef(null)
const [prop, setProp] = useState(true)
const handleEntered = () => {
setTimeout(() => {
setProp(false)
},2000)
}
return (
<CSSTransition in={prop} timeout={1000} classNames="Message"
nodeRef={nodeRef} appear onEntered={handleEntered} unmountOnExit>
<div className="Message" ref={nodeRef}>{icon} {text}</div>
</CSSTransition>
)
}
const message = {
success(text) {
const message = ReactDOM.createRoot(document.querySelector("#message"))
message.render(<Message text={text} icon="√" />)
}
}
export default function App() {
const handleClick = () => {
message.success('登录成功')
}
return (
<>
<button onClick={handleClick}>点击</button>
</>
)
}
写回答
1回答
-
你好,只需要判断一下,只触发一次就可以解决
const message = {
success(text) {
if(!this.container) {
this.container = ReactDOM.createRoot(document.querySelector("#message"))
this.container.render(<Message text={text} icon="√" />)
}
}
}
032023-05-31
相似问题