背景在日常的需求开发中,我们经常需要用到弹窗,所以我们在构建弹窗的时候,需要在引用组件的时候引入组件DOM,然后通过事件来控制组件的隐藏显示,调用是不是很方便;本组件使用预注册的DOM方法,业务方在使用时直接调用暴露的方法即可,无需引用DOM。示例组件使用示例importnewDialogfrom"*./components/newDialog"newDialog.open({title:"退出发布",content:'是否要保存草稿箱?',btn:[{text:"不要save"},{text:"Save"}],callback:(event)=>{if(event.result==2){//TODO}else{//TODO}}});API参数描述类型必填titlebomb窗口标题String√content弹窗显示内容String\ReactDom√btn弹窗按钮可配置一个或两个Array√callback弹窗响应回调方法Function√弹窗按钮说明//弹出按钮是一个json数组配置,最多配置两个Abtn:[{text:"Donotsave"},{text:"Save"}],//每个按钮只需要配置text按钮的样式和颜色可以集成到css中//如果配置一个按钮,会在底部长按钮配置两个回调参数,按照配置的数组顺序从左到右显示//点击返回回调数据并关闭弹窗的按钮{result:1/2//返回按钮的索引值}完整代码js代码newDialog.tsx'usestrict';import'./newDialog.scss';import*从'react'作为React;从“classnames”导入cs;从'react-dom'导入*作为ReactDOM;从'./导入{isIphoneX}../../util/util';/***@description解决移动端滚动穿透事件**/constModalHelper=(function(bodyCls){varscrollTop;return{afterOpen:function(){scrollTop=document.scrollingElement.scrollTop;文档.body.classList.add(bodyCls);document.body.style.top=-scrollTop+'px';},beforeClose:function(){document.body.classList.remove(bodyCls);//设置position:fixed后scrollTop丢失,将其恢复。document.scrollingElement.scrollTop=scrollTop;}};})('modal-open');interfaceIAppProps{title?:string;内容?:任何;btn?:任何;回调?:函数;}接口IAppState{showToast?:布尔值;标题?:字符串;内容?:任何;btn?:任何;回调?:功能;isIPhoneX?:Boolean;}letDialogDiv;classDialogextendsReact.Component