React Hook实现对话框组件
更新时间:2022年08月23日 14:59:16 作者:weixin_45703889
这篇文章主要为大家详细介绍了React Hook实现对话框组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
React Hook实现对话框组件,供大家参考,具体内容如下
准备
- 思路:对话框组件是有需要的时候希望它能够弹出来,不需要的时候在页面上是没有任何显示的,这就意味着需要一个状态,在父组件点击按钮或其他的时候能够更改+ 它并显示,同时子组件(对话框组件)点击关闭的时候也需要更改这个状态。
进阶:为对话框组件背景添加蒙皮,当对话框内容需要滚动时限制浏览器页面的滚动。
- React Hook 主要用到了 useState,useContext,useContext 主要用于将父组件的 setStatus 传递给子组件以至于它可以更新状态。
附上 Dialog 和 DialogMain组件代码,其中DialogMain 为父组件,使用时只需将其挂载至 App.js。
代码
DialogMain 父组件代码
import React from "react"; import Dialog from "./dialog"; //初始化 Context export const StatusContext = React.createContext(); const DialogTest = () => { //设置状态控制对话框的打开与关闭 const [status, setStatus] = React.useState(false); //条件渲染,符合条件返回 Dialog 组件否则返回 null function GetDialog() { if (status) return <Dialog />; else return null; } //打开函数 function openDialog() { //打开时禁止浏览器外面的滚动,注释掉这行鼠标在对话框外面时可以滚动浏览器界面 document.body.style.overflow = "hidden"; setStatus(true); } return ( <div> {/* 按钮绑定打开函数 */} <button onClick={openDialog}>打开对话框</button> {/* 使用 Context 的 Provider 暴露 setStatus 方法 */} <StatusContext.Provider value={{ setStatus }}> <GetDialog /> </StatusContext.Provider> </div> ); }; export default DialogTest;
Dialog子组件代码
import React from "react"; import { StatusContext } from "./dialogMain"; const Dialog = (props) => { //利用解构赋值将 setState 从 useContext分离出来 const { setStatus } = React.useContext(StatusContext); //关闭时更改 Status 状态为 false function uninstallDialog() { setStatus(false); //关闭时重新将浏览器界面设置为滚动或其他 document.body.style.overflow = "scroll"; } // 点击蒙层本身时关闭对话框,点击对话框的内容时不关闭 function handleClick(event) { if (event.target === event.currentTarget) { //调用关闭的方法 uninstallDialog(); } } return ( // 为整个组件添加css 样式并让其置于顶层,同时对话框意外的地方添加模糊效果 <div style={{ position: " fixed", top: 0, left: 0, right: 0, bottom: 0, background: "rgba(0, 0, 0, 0.3)", zIndex: " 99", }} onClick={handleClick} > {/* 为对话框添加 css 样式,absolute定位时相对于容器的位置 ,同时将 overflow 设置为自动*/} <div style={{ position: "absolute", left: "50%", top: "50%", overflow: "auto", transform: "translate(-50%, -50%)", padding: "30px 30px", width: " 200px", height: " 200px", border: "2px solid yellow", borderRadius: "8px", background: "yellow", }} > {/* 为关闭按钮绑定关闭方法 */} <button onClick={uninstallDialog}>关闭</button> 对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框 对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框 对话框 对话框 对话框 对话框 对话框 对话框 对话框 对话框 对话框 </div> </div> ); }; export default Dialog;
App.js代码
import "./App.css"; import DialogMain from "./component/dialogTest/dialogMain"; function App() { return ( <div className="App"> <div style={{ height: "2000px" }}> <DialogMain /> </div> </div> ); } export default App;
运行界面
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
React如何解决fetch跨域请求时session失效问题
这篇文章主要给大家介绍了关于React如何解决fetch跨域请求时session失效问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2018-11-11React Native使用Modal自定义分享界面的示例代码
本篇文章主要介绍了React Native使用Modal自定义分享界面的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-10-10Reactjs + Nodejs + Mongodb 实现文件上传功能实例详解
今天是使用 Reactjs + Nodejs + Mongodb 实现文件上传功能,前端我们使用 Reactjs + Axios 来搭建前端上传文件应用,后端我们使用 Node.js + Express + Multer + Mongodb 来搭建后端上传文件处理应用,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧2022-06-06react16+antd4 RangePicker组件实现时间禁选示例
这篇文章主要为大家介绍了react16+antd4 RangePicker 时间禁选示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-05-05
最新评论