国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

使用React手寫一個對話框或模態框的方法示例

2024-05-06 16:50:15
字體:
來源:轉載
供稿:網友

打算用React對話框已經很長一段時間,現在是時候兌現承諾了。實際上,寫起來相當簡單。

核心在于使用React的接口React.createPortal(element, domContainer)。該接口將element渲染后的DOM節點嵌入domContainer(通常是document.body),并保證只嵌入一次。

所以,我們可以這樣寫一個對話框或模態框

function Dialog() {  return React.createPortal( <div>Dialog contents</div>, document.body )}

一個新的div會出現在body內部:

React,對話框,模態框

一個完整DEMO:

React,對話框,模態框

點擊運行DEMO

class Modal extends React.Component { render() {  const {   visible,   onClose  } = this.props  return visible && ReactDOM.createPortal(<StyledModalRoot>   <div className="box">    Content    <br/>    <button onClick={onClose}>Close</button>   </div>  </StyledModalRoot>, document.body) }}class App extends React.Component { state = {  visibleModal: false } showModal = () => this.setState( { visibleModal: true } ) handleCloseModal = () => this.setState( { visibleModal: false } ) render() {  const { visibleModal } = this.state  return <div style={{padding: '20px'}}>  <button onClick={ this.showModal }>Show Modal</button>  <Modal visible={visibleModal} onClose={ this.handleCloseModal } /> </div> }}const StyledModalRoot = styled.div` position: fixed; z-index: 1001; left: 0; top: 0; display: grid; place-items: center; width: 100%; height: 100%; background: rgba( 0, 0, 0, 0.2 ); >.box {  position: relative;  display: grid;  place-items: center;  width: 80%;  height: 80%;  background: white;  border-radius: 10px;  box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2), 0px 5px 8px 0px rgba(0,0,0,0.14), 0px 1px 14px 0px rgba(0,0,0,0.12); }`

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 修武县| 鸡西市| 江安县| 织金县| 南岸区| 古浪县| 宁都县| 依安县| 奈曼旗| 巴彦淖尔市| 同仁县| 东乌珠穆沁旗| 四子王旗| 景宁| 英吉沙县| 逊克县| 湾仔区| 遵化市| 二连浩特市| 徐州市| 台江县| 长垣县| 满洲里市| 云梦县| 方山县| 峨眉山市| 乌兰浩特市| 台北市| 宁夏| 六盘水市| 锡林郭勒盟| 双牌县| 西盟| 巴林左旗| 浙江省| 铁岭市| 闸北区| 嘉义市| 二手房| 六枝特区| 巴彦县|