Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux中间件工作了一半,但没有完全取消操作_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript Redux中间件工作了一半,但没有完全取消操作

Javascript Redux中间件工作了一半,但没有完全取消操作,javascript,reactjs,redux,Javascript,Reactjs,Redux,我有一些简单的中间件,可以工作,但也不能工作 基本上我有一个用户列表,我正试图删除一个。然后与firebase同步。一切都很好 我正在添加一些中间件,这样当用户删除一个中间件时,它会询问您是否确定?(现在只需使用一个简单的警报)。如果单击“取消”,则不会删除。如果单击“确定”,则会执行此操作 到目前为止,这是有效的,但由于我的行动创造者,它仍然在进行和删除用户。下面是一些代码: //单击以删除用户 <button onClick={() => this.pro

我有一些简单的中间件,可以工作,但也不能工作

基本上我有一个用户列表,我正试图删除一个。然后与firebase同步。一切都很好

我正在添加一些中间件,这样当用户删除一个中间件时,它会询问您是否确定?(现在只需使用一个简单的
警报
)。如果单击“取消”,则不会删除。如果单击“确定”,则会执行此操作

到目前为止,这是有效的,但由于我的行动创造者,它仍然在进行和删除用户。下面是一些代码:

//单击以删除用户

  <button
    onClick={() =>
      this.props.deleteUserFromStoreThenUpdateFirebase(user)
    }
 >
中间件:

const confirmMiddleware = store => next => action => {
    if(action.reqConfirm){
      if(confirm('are you sure?')){
        next(action)
      }
    }
    else {
      next(action)
    }
}

我还认为确认操作应该是UI的[唯一]角色。

Redux存储可以(应该?)被视为API-请求(操作)>响应(更改状态)。您是否正在向API发送请求并等待确认消息?这至少会很奇怪

但我从这个想法中看到了更多的意义。集中确认元素可以起到类似于祝酒词/零食条消息的作用

问题#1:用户界面和存储逻辑之间存在严格的分离-您不能使用中间件来显示对话框。但您可以更改可在UI中用于显示确认对话框的状态

问题#2:没有简单的
if/then/return
操作链,您必须缓冲一个操作并在确认后运行它(接收“确认”操作)或在取消时删除它。是的,它可以作为中间件来完成

想法: 作为需要确认而调度的操作保存在缓冲区中。然后,您可以将动作类型更改为“确认”\u SHOW——状态将更改,道具已传递,可以显示模式对话框

CONFIRM\u OK
runbuffered action上,接下来的步骤将与
CONFIRM\u CANCEL
相同:清除缓冲区并隐藏模式。它甚至可以是一个值-缓冲区可以是
mapStateToProps
中描述的模式标志(空-隐藏,定义-显示)


为完全可用,应该有一个选项来传递自定义确认消息,连同<代码> ReQuest[]。

为了安全起见,您能考虑只有当用户单击OK时才会显示确认对话框并发出删除动作的动作吗?Yeh,这正是我想要的。我该怎么做?我在考虑捕捉承诺并返回false或其他什么?您可能应该使用自定义对话框而不是
确认
来获得更多控制。单击按钮时显示对话框,但不要分派任何内容。只有当用户确认他们确实希望删除该用户时才发送DELETE_USER。但我仍然认为确认可以工作吗?只是在什么时候接到电话而不是确认itself@Aaaron有什么想法吗?
const confirmMiddleware = store => next => action => {
    if(action.reqConfirm){
      if(confirm('are you sure?')){
        next(action)
      }
    }
    else {
      next(action)
    }
}