React.createPortal()
时间:2020-09-23 15:45:37
收藏:0
阅读:92
https://blog.csdn.net/sd19871122/article/details/97612107
createProtal 改造 Modal 组件
在 html 中除了 div#root 之外,给 Modal 预留了一个新的 div#modal-root,:
-
const appRoot = document.getElementById(‘root‘);
-
const modalRoot = document.getElementById(‘modal-root‘);
改造 Modal 容器
新的 Modal 容器组件内容如下:
-
class ModalContainer extends Component {
-
constructor(props) {
-
super(props);
-
this.el = document.createElement(‘div‘);
-
}
-
componentDidMount() {
-
modalRoot.appendChild(this.el);
-
}
-
componentWillUnmount() {
-
modalRoot.removeChild(this.el);
-
}
-
render() {
-
return ReactDOM.createPortal(
-
this.props.children,
-
this.el
-
);
-
}
-
}将 ModalContent 挂载到 ModalContainer
-
class App2 extends Component {
-
state = {
-
name: ‘clickme‘
-
}
-
componentDidMount(){
-
// console.log(findDOMNode(ref.current))
-
}
-
clickHandle = () => {
-
this.setState({
-
name: ‘clickme‘ + Date.now()
-
});
-
}
-
render() {
-
return (
-
<div className="App">
-
<ModalContainer>
-
<ModalContent />
-
</ModalContainer>
-
</div>
-
);
-
}
-
}即使主组件是
overflow:hidden的,但是 modal 能够正常出现,同时,因为div#modal-root是z-index: 999,因此会置于最上层。
-
原文:https://www.cnblogs.com/zwjun/p/13718562.html
评论(0)