【问题标题】:ReactJS Modal with Material UI带有 Material UI 的 ReactJS 模态
【发布时间】:2021-01-28 13:58:29
【问题描述】:

我正在尝试使用 Material UI 创建一个可重复使用的确认模式,但是当我按下 CANCEL 或 OK 时,模式并没有关闭。

代码在这里:

https://codesandbox.io/s/lucid-hoover-sput6?file=/src/App.js

我不明白为什么流行音乐没有消失。

LE:在此处添加代码以便保留

ConfirmModal.js

import React from "react";
import { Button } from "@material-ui/core";
import Dialog from "@material-ui/core/Dialog";
import DialogActions from "@material-ui/core/DialogActions";
import DialogContent from "@material-ui/core/DialogContent";
import DialogContentText from "@material-ui/core/DialogContentText";

const ConfirmModal = (props) => {
  const { content, open, setOpen, onConfirm } = props;

  return (
    <Dialog
      open={open}
      onClose={() => setOpen(false)}
      aria-labelledby="dialog-title"
    >
      <DialogContent>
        <DialogContentText>{content}</DialogContentText>
      </DialogContent>
      <DialogActions>
        <Button autoFocus onClick={() => setOpen(false)} color="primary">
          Cancel
        </Button>
        <Button
          onClick={() => {
            setOpen(false);
            onConfirm();
          }}
          color="primary"
        >
          OK
        </Button>
      </DialogActions>
    </Dialog>
    // </div>
  );
};

export default ConfirmModal;

App.js

import React, { useState } from "react";
import { IconButton } from "@material-ui/core";
import { Input as InputIcon } from "@material-ui/icons";

import ConfirmModal from "./ConfirmModal";

export default function App() {
  const [confirmOpen, setConfirmOpen] = useState(false);

  const handleLogout = () => {
    console.log("this hould logout the user");
  };

  return (
    <div className="App">
      <h2>Press the button below so the confirmation modal appears </h2>
      <IconButton color="inherit" onClick={() => setConfirmOpen(true)}>
        <InputIcon />
        <ConfirmModal
          content="Are you sure you want to leeeave us ?"
          open={confirmOpen}
          setOpen={setConfirmOpen}
          onConfirm={handleLogout}
        />
      </IconButton>
    </div>
  );
}

【问题讨论】:

    标签: reactjs material-ui confirmation


    【解决方案1】:

    将模式移出按钮。模态的取消/确认/背景点击事件正在传播(冒泡)到打开按钮(IconButton),它的onClick 处理程序只是通过设置confirmOpen 状态true 重新打开模态。

    export default function App() {
      const [confirmOpen, setConfirmOpen] = useState(false);
    
      const handleLogout = () => {
        console.log("this hould logout the user");
      };
    
      return (
        <div className="App">
          <h2>Press the button below so the confirmation modal appears </h2>
          <IconButton color="inherit" onClick={() => setConfirmOpen(true)}>
            <InputIcon />
          </IconButton>
          <ConfirmModal
            content="Are you sure you want to leeeave us ?"
            open={confirmOpen}
            setOpen={setConfirmOpen}
            onConfirm={handleLogout}
          />
        </div>
      );
    }
    

    【讨论】:

    • 很好,它正在工作,但是“它的 onClick 处理程序只是重新打开模式”是什么意思。你指的是什么“onClick”?
    • @nipuro 从模态气泡到用于打开模态的按钮的点击事件。我更新了答案,希望能更清楚一点。
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2017-04-07
    • 2020-03-20
    • 2017-08-29
    • 2019-07-25
    相关资源
    最近更新 更多