【问题标题】:Make a Confirmation Modal using React & Redux使用 React 和 Redux 制作确认模式
【发布时间】:2020-05-15 23:04:15
【问题描述】:

我正在制作一个应用程序,我需要在其中制作一个确认框来询问用户是否要删除记录。我想在全球范围内使用确认框

假设我想删除一条记录,当用户单击删除按钮时,它会执行删除记录的操作。 但是一旦在删除动作中,另一个动作被调度来显示模态。 (直到这一点我已经达到)
但是,我在执行应该等待用户单击确认或取消的部分上苦苦挣扎。 一旦用户执行了该操作,则应继续执行删除记录。

我希望我的问题陈述很清楚。

请让我知道我该怎么做。我真的很想了解这个东西在 React 中是如何工作的。

目前,我正在使用窗口的确认来询问用户是或否。

// Delete Profile
export const deleteProfile = (history) => async (dispatch) => {
    try {
        if (
            window.confirm('Are you Sure? Your account would be permanently lost')
        ) {
            await axios.delete(`/api/profile`);

            dispatch({ type: actionTypes.CLEAR_PROFILE });
            dispatch({ type: actionTypes.ACCOUNT_DELETED });
            history.push('/login');
            dispatch(
                setAlert('Your account has been deleted permanently', 'success')
            );
        }
    } catch (err) {
        dispatch(setAlert('Profile deletion error', 'danger'));
    }
};

我希望调用一个模态来代替窗口确认并等待用户输入,如果它返回 true 我想继续前进或者中止。

【问题讨论】:

  • 你能举一个你说的代码的例子吗?很高兴看到您如何处理操作和调度程序。
  • 嗨,保罗,我已经添加了动作文件的代码。我也会更新我一直在尝试做的事情。

标签: javascript reactjs redux react-redux modal-dialog


【解决方案1】:

您必须创建一个名为 Dialog 的组件,该组件在调用 deleteProfile 方法时打开并放置两个按钮,一个用于取消,另一个用于删除,当按下删除按钮时,您将调用删除代码。我建议你使用像material-ui 这样的库。这个库有多个有用且非常漂亮的组件可供您使用。对于这种情况,我特别推荐您使用Dialog 组件。你可以这样使用它:

<Dialog
   open={dialogOpen}
   onClose={dialogClose}
   >
   <DialogContent>
      Are you Sure? Your account would be permanently lost
   </DialogContent>
   <DialogActions>
      <Button>Cancel</Button>
      <Button onClick={deleteMethod}>Delete</Button>
   </DialogActions>
</Dialog>

其中dialogOpen 是布尔组件状态或redux 状态,当为true 时,Dialog 将打开;而dialogClose 是一种将dialogOpen 状态更改为false 以关闭对话框的方法。

现在您可以检查您是否拥有deleteMethod,您将删除所有代码。按下删除按钮时调用此代码。

要异步打开对话框,您可以做的是在设置 dialogOpen 变量后放置并等待,如下所示:

await this.setState({dialogOpen: true});

或者如果你想在这样的异步方法中:

const method = async () =>{
  await this.setState({dialogOpen: true});
}

你只需要像这样调用方法:

await method();

我希望这会有所帮助!

【讨论】:

  • 是否可以异步调用该组件,等待用户输入。
  • 据我了解,我将调度一个名为 SET_DIALOG 的操作,它将 isSetDialog 的状态更改为 true。这将导致 Dialog 可见,然后我们可以等待用户的输入。
  • 我怎样才能异步调度一个动作来触发 isSetDialog 并等待用户的输入?
  • 你必须设置isSetDialgo异步的变量。我已经用一个例子编辑了我的答案
  • 非常感谢保罗的帮助。我会尝试实施您的建议。
【解决方案2】:

点击删除按钮打开确认框。 点击确认按钮删除记录。

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多