如何使用 material-ui 处理“外部”单击对话框(模态)

rsz*_*man 19 javascript dialog modal-dialog reactjs material-ui

在框外单击时我的框会关闭,这使我丢失了所有输入。我希望我的框仅在单击取消按钮时关闭。我不确定是什么让它在外面点击时关闭。有什么帮助吗?

我正在使用@material-ui/core

  _close() {
        DeviceCreationActions.close();
    }

render() {
        const actions = [
            <Button
                id="device-create-dialog-close"
                key="device-create-dialog-close"
                onClick={this._close}
            >
              {this.context.intl.formatMessage({id: 'Cancel'})}
            </Button>
        ];

        if (0 < this.state.stepIndex) {
            actions.push(<Button
                id="device-create-dialog-back"
                key="device-create-dialog-back"
                onClick={this._previousStep.bind(this)}
              >
                {this.context.intl.formatMessage({id: 'Back'})}
              </Button>
            );
        }

        if (
            (1 >= this.state.stepIndex && 0 < this.state['formStep' + this.state.stepIndex].length) ||
            (0 < this.state.stepIndex)
        ) {
            actions.push(<Button
                id="device-create-dialog-next"
                key="device-create-dialog-next"
                onClick={2 === this.state.stepIndex ? this._save.bind(this) : this._nextStep.bind(this)}
              >
                {this.context.intl.formatMessage({id: 2 === this.state.stepIndex ? 'Create' : 'Next'})}
              </Button>
            );
        }
Run Code Online (Sandbox Code Playgroud)

Ado*_*bia 48

我认为您需要disableBackdropClick传递给<Modal />组件

<Modal disableBackdropClick />
Run Code Online (Sandbox Code Playgroud)

您还可以使用disableEscapeKeyDownprop在 Esc 键按下时禁用关闭对话框

  • 现在已弃用 (24认同)

小智 22

只需删除该onClose方法即可

  <Dialog
     sx={{
       position: 'absolute',
       left: 300,
       top: 35
     }}
     maxWidth="lg"
    open={open}
    // onClose={handleClose}
   .....
Run Code Online (Sandbox Code Playgroud)

  • 删除“onClose”还会删除通过按 ESC 键关闭对话框的功能 (6认同)
  • 这样你就完全失去了 onClose 处理程序 (2认同)

小智 12

disableBackdropClick 在 Material UI v5 中不起作用。

对话框 API(下一个)

您可以使用迁移指南中的代码:

<Dialog
  onClose={(event, reason) => {
    if (reason !== 'backdropClick') {
      onClose(event, reason);
    }
  }}
/>
Run Code Online (Sandbox Code Playgroud)

  • 很好,这是确切的答案:) (3认同)
  • 或不要传递关闭 (3认同)