ReactJS 如何调用打开简单模态的函数?

Posted

技术标签:

【中文标题】ReactJS 如何调用打开简单模态的函数?【英文标题】:ReactJS How to call a function that opens a simple modal? 【发布时间】:2020-03-29 11:34:44 【问题描述】:

我的问题可能与 js 语法有关,但问题是,在 material-ui 中,我们收到了 Modal 函数的 js 代码,那么如何从另一个文件中调用要打开的模式单击按钮(在本例中为onRowClicked 在表格中)

带有相关代码的Modal.js文件是:

export default function TransitionsModal() 
  const classes = useStyles();
  const [open, setOpen] = React.useState(false);

  const handleOpen = () => 
    setOpen(true);
  ;

  const handleClose = () => 
    setOpen(false);
  ;

  return (
    <div>
      <Modal
        aria-labelledby="transition-modal-title"
        aria-describedby="transition-modal-description"
        className=classes.modal
        open=open
        onClose=handleClose
        closeAfterTransition
        BackdropComponent=Backdrop
        BackdropProps=
          timeout: 500,
        
      >

MainTable.js代码及相关代码为:

const openPopup = rowData => 
    console.log(rowData.EBELN);
    TransitionsModal().setOpen(true); <---- Trying to call the Modal and open it


const MainTable = props => 
    return (
      <div className="col-md-12">
        <div className="feed-toggle">
          <ul className="nav nav-pills outline-active">
          </ul>
        </div>
        <MaterialTable
            columns = columnsSetup
            options =  NOT_RELATED 

            onRowClick=(event, rowData) => openPopup(rowData) -> calls Open Popup

            data=query => NOT_RELATED
                    );
                  )
              )
            
          />
      </div>
    );
  ;

【问题讨论】:

您是否将handleOpen 方法作为道具传递给您的MainTable组件? 不行,去看看怎么做。 【参考方案1】:

我认为您可以尝试从您的MainList 组件控制TransitionModal


const MainTable = props => 
   const [showModal , setModal] = useState;

   const handleModal = status => 
     setModal(status); 
   


    return (
      <div className="col-md-12">
        <TransitionsModal
         showModal=showModal 
         handleModal= handleModal 
        />
        <div className="feed-toggle">
          <ul className="nav nav-pills outline-active">
          </ul>
        </div>
        <MaterialTable
            columns = columnsSetup
            options =  NOT_RELATED 

            onRowClick=(event, rowData) => openPopup(rowData) -> calls Open Popup

            data=query => NOT_RELATED
                    );
                  )
              )
            
          />
      </div>
    );
  ;

在您的TransitionModal 组件中,您只需传递道具来控制它是否会显示“showModal”以及允许它关闭它的方法handleModal,检查我是否制作了一种可以处理打开和关闭,只需传递status 参数:

export default function TransitionsModal(  showModal, handleModal  ) 
  const classes = useStyles();

  return (
    <div>
      <Modal
        aria-labelledby="transition-modal-title"
        aria-describedby="transition-modal-description"
        className=classes.modal
        open= showModal 
        onClose= () =>  handleModal(false)  
        closeAfterTransition
        BackdropComponent=Backdrop
        BackdropProps=
          timeout: 500,
        
      >

【讨论】:

好像不行,需要定义handleOpen和useState。我还需要将 rowData 传递给 Modal 以便使用另一个 API 调用。 handleModalMainTable 声明,因此您可以将其作为道具传递给您的模态,您也可以将任何您需要的prop 传递给TransitionModal,所以如果您需要 rowData 很容易通过组件传递它

以上是关于ReactJS 如何调用打开简单模态的函数?的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS - 使用反应钩子防止模态的初始动画

ReactJS:This.props.toggleModal 不是函数

如果响应在模态中出错,则 ReactJS 引导警报

模态对话框如何调用父窗口的JS函数?

ReactJS:在superagent ajax请求期间显示带有加载消息的模态

如何在点击锚标签时打开模态?