欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React?Hook實現(xiàn)對話框組件

 更新時間:2022年08月23日 14:59:16   作者:weixin_45703889  
這篇文章主要為大家詳細介紹了React?Hook實現(xiàn)對話框組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

React Hook實現(xiàn)對話框組件,供大家參考,具體內(nèi)容如下

準備

  • 思路:對話框組件是有需要的時候希望它能夠彈出來,不需要的時候在頁面上是沒有任何顯示的,這就意味著需要一個狀態(tài),在父組件點擊按鈕或其他的時候能夠更改+ 它并顯示,同時子組件(對話框組件)點擊關(guān)閉的時候也需要更改這個狀態(tài)。

      進階:為對話框組件背景添加蒙皮,當對話框內(nèi)容需要滾動時限制瀏覽器頁面的滾動。

  • React Hook 主要用到了 useState,useContext,useContext 主要用于將父組件的 setStatus 傳遞給子組件以至于它可以更新狀態(tài)。

附上 Dialog 和 DialogMain組件代碼,其中DialogMain 為父組件,使用時只需將其掛載至 App.js。

代碼

DialogMain 父組件代碼

import React from "react";
import Dialog from "./dialog";
//初始化 Context
export const StatusContext = React.createContext();
const DialogTest = () => {
? ? //設(shè)置狀態(tài)控制對話框的打開與關(guān)閉
? ? const [status, setStatus] = React.useState(false);
? ? //條件渲染,符合條件返回 Dialog 組件否則返回 null
? ? function GetDialog() {
? ? ? ? if (status) return <Dialog />;
? ? ? ? else return null;
? ? }
? ? //打開函數(shù)
? ? function openDialog() {
? ? ? ? //打開時禁止瀏覽器外面的滾動,注釋掉這行鼠標在對話框外面時可以滾動瀏覽器界面
? ? ? ? document.body.style.overflow = "hidden";
? ? ? ? setStatus(true);
? ? }
? ? return (
? ? ? ? <div>
? ? ? ? ? ? {/* 按鈕綁定打開函數(shù) */}
? ? ? ? ? ? <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) => {
? ? //利用解構(gòu)賦值將 setState 從 useContext分離出來
? ? const { setStatus } = React.useContext(StatusContext);
? ? //關(guān)閉時更改 Status 狀態(tài)為 false
? ? function uninstallDialog() {
? ? ? ? setStatus(false);
? ? ? ? //關(guān)閉時重新將瀏覽器界面設(shè)置為滾動或其他
? ? ? ? document.body.style.overflow = "scroll";
? ? }
? ? // 點擊蒙層本身時關(guān)閉對話框,點擊對話框的內(nèi)容時不關(guān)閉
? ? function handleClick(event) {
? ? ? ? if (event.target === event.currentTarget) {
? ? ? ? ? ? //調(diào)用關(guān)閉的方法
? ? ? ? ? ? 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 設(shè)置為自動*/}
? ? ? ? ? ? <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",
? ? ? ? ? ? ? ? }}
? ? ? ? ? ? >
? ? ? ? ? ? ? ? {/* 為關(guān)閉按鈕綁定關(guān)閉方法 */}
? ? ? ? ? ? ? ? <button onClick={uninstallDialog}>關(guān)閉</button>
? ? ? ? ? ? ? ? 對話框?qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒?
? ? ? ? ? ? ? ? 對話框?qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒驅(qū)υ捒?
? ? ? ? ? ? ? ? 對話框 對話框 對話框 對話框 對話框 對話框 對話框 對話框 對話框
? ? ? ? ? ? </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;

運行界面

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React Native基礎(chǔ)入門之初步使用Flexbox布局

    React Native基礎(chǔ)入門之初步使用Flexbox布局

    React中引入了flexbox概念,flexbox是屬于web前端領(lǐng)域CSS的一種布局方案,下面這篇文章主要給大家介紹了關(guān)于React Native基礎(chǔ)入門之初步使用Flexbox布局的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-07-07
  • react?echarts?tree樹圖搜索展開功能示例詳解

    react?echarts?tree樹圖搜索展開功能示例詳解

    這篇文章主要為大家介紹了react?echarts?tree樹圖搜索展開功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 詳解React?hooks組件通信方法

    詳解React?hooks組件通信方法

    這篇文章主要介紹了React?hooks組件通信,在開發(fā)中組件通信是React中的一個重要的知識點,本文通過實例代碼給大家講解react hooks中常用的父子、跨組件通信的方法,需要的朋友可以參考下
    2022-07-07
  • React 原理詳解

    React 原理詳解

    這篇文章主要介紹了深入理解react的原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • React18之update流程從零實現(xiàn)詳解

    React18之update流程從零實現(xiàn)詳解

    這篇文章主要為大家介紹了React18之update流程從零實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React實現(xiàn)圖片懶加載的常見方式

    React實現(xiàn)圖片懶加載的常見方式

    圖片懶加載是一種優(yōu)化網(wǎng)頁性能的技術(shù),它允許在用戶滾動到圖片位置之前延遲加載圖片,通過懶加載,可以在用戶需要查看圖片時才加載圖片,避免了不必要的圖片加載,本文給大家介紹了React實現(xiàn)圖片懶加載的常見方式,需要的朋友可以參考下
    2024-01-01
  • React Native實現(xiàn)地址挑選器功能

    React Native實現(xiàn)地址挑選器功能

    這篇文章主要為大家詳細介紹了React Native仿地址挑選器功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • reset.css瀏覽器默認樣式表重置(user?agent?stylesheet)的示例代碼

    reset.css瀏覽器默認樣式表重置(user?agent?stylesheet)的示例代碼

    這篇文章主要介紹了reset.css瀏覽器默認樣式表重置(user?agent?stylesheet),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12
  • React利用路由實現(xiàn)登錄界面的跳轉(zhuǎn)

    React利用路由實現(xiàn)登錄界面的跳轉(zhuǎn)

    這篇文章主要介紹了React利用路由實現(xiàn)登錄界面的跳轉(zhuǎn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • react中的watch監(jiān)視屬性-useEffect介紹

    react中的watch監(jiān)視屬性-useEffect介紹

    這篇文章主要介紹了react中的watch監(jiān)視屬性-useEffect使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論