Redux 中间件工作一半,但未完全取消操作

2024-01-09

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

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

我添加了一些中间件,以便当用户删除一个中间件时,它会询问您是否确定? (只需使用一个简单的alert目前)。如果单击“取消”,则不会删除。如果你点击“确定”,它就会

到目前为止,这是有效的,但由于我的动作创建者,它仍然继续并删除用户。这是一些代码:

// 点击删除用户

  <button
    onClick={() =>
      this.props.deleteUserFromStoreThenUpdateFirebase(user)
    }
 >

调用这个方法 我认为这里发生了一些奇怪的事情,基本上它不应该调用deletedUserFromFirebase如果我点击取消的方法

export const deleteUserFromStoreThenUpdateFirebase = user => {
  return (dispatch, getState) => {
    return dispatch(deleteUser(user)).then(() => {
      return deleteUserFromFirebase(user);
    })
  };
};


export const deleteUser = user => {
  return async dispatch => {
    dispatch({ type: DELETE_USER, user: user, reqConfirm: true });
  };
};

中间件:

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

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

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

但我认为这个想法不仅仅是某种意义。集中式确认元素可以具有与 toast/snackbar 消息类似的作用。

问题#1: 有一个strictUI 和存储逻辑之间的分离 -你不能使用中间件来显示对话框. But 您可以更改可在 UI 中使用的状态以显示确认对话框.

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

IDEA: 需要确认时调度的操作保存在缓冲区中。然后您可以将操作类型更改为CONFIRM_SHOW- 状态将被改变,道具被传递,模式对话框可以被显示。

On CONFIRM_OK运行缓冲操作,接下来的步骤将与CONFIRM_CANCEL:清除缓冲区并隐藏模态。它甚至可以是一个值 - 缓冲区可以是一个模态标志(空 - 隐藏,定义 - 显示)mapStateToProps.

为了完全可用,应该有一个选项来传递自定义确认消息以及reqConfirm.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redux 中间件工作一半,但未完全取消操作 的相关文章

随机推荐

  • 实体框架始终包含上下文中的数据,即使我不要求它

    我首先使用 MVC NET Web api EF 和 DB 并且在上下文中关闭了延迟加载 即使关闭了 LazyLoading EF 也会返回太多数据 例如 我有一个具有一种角色的用户 当我查询 Users 和 Include Role 时
  • 是否可以杀死 WaitForSingleObject(handle, INFINITE) ?

    我在关闭使用 WaitForSingleObject 并具有无限超时的应用程序时遇到问题 完整的图片是这样的 我正在执行以下操作以允许我的应用程序处理设备唤醒事件 通过以下方式注册活动 CeRunAppAtEvent Notificatio
  • 访问超类类型成员对象的受保护成员 - 一个优雅的解决方案

    首先 我知道我做不到 而且我认为这不是重复的问题 this https stackoverflow com questions 477829 cannot call base class protected functions and th
  • Seaborn 绘图未显示

    我一直在尝试使用 Seaborn 绘制一个简单的条形图 奇怪的是 之前的情节有效 但这些情节没有出现 没有抛出任何错误 据我所知 代码没问题 也许更有经验的眼睛就能发现错误 import pandas as pd import numpy
  • 有没有一种简单的方法来合并 C# 匿名对象

    假设我有两个这样的匿名对象 var objA new test test blah blah var objB new foo foo bar bar 我想将它们结合起来得到 new test test blah blah foo foo
  • 如何在发布模式下调试

    有没有办法在 Xamarin 中以发布模式调试应用程序 当我在发布模式下开始调试时 它只运行应用程序而不启动调试器 我问这个问题 因为应用程序在调试器模式下工作 但在发布模式下崩溃 确实没有充分的理由debug in a Release配置
  • Android更改listview项目文本颜色

    我正在尝试根据 flag 更改列表视图中的某些项目文本颜色 或背景颜色 经过长时间的搜索 我没有找到如何做到这一点 我在特定操作后调用以下循环来更改颜色 ListView listView ListView findViewById R i
  • 如何使用rack-mini-profiler 分析返回json 响应的rails 控制器?

    我在 Rails 3 2 项目中使用rack mini profiler 在宝石文件中 gem rack mini profiler 一切都很好 但我的应用程序主要是一组 json 端点 因此 虽然能够检查 html 页面的性能非常有用 但
  • 使用 JavaScript 生成 RSA 密钥?

    有没有办法使用 JavaScript 生成私钥和公钥 我需要数据库中的这些密钥 开始 RSA 私钥 MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ WMNW6
  • 通过外部实体在刷新时例外的 Doctrine OneToOne 身份

    I have User and UserProfileOneToOne 相关的 Doctrine ORM 实体 他们应该永远成对存在 不应该有User没有UserProfile User 应该从自动增量中获取其 id 而 UserProfi
  • 如何使用社区服务器连接器扩展在 VSC 上启动 Tomcat 8.5 服务器

    我正在尝试在 VSC 上设置 Tomcat 服务器 因为它无法在 IntelliJ 上运行 因为我没有终极版本 但我没有使用 Community Server Connector 的经验 我的同事也没有 我们所有的文档都是为 Tomcat
  • 缺少 Maven 插件 Jetty

    我在执行此操作时遇到问题http hrycan com 2012 03 28 primefaces lazy loading datatable for jsf2 http hrycan com 2012 03 28 primefaces
  • 来自共享或操作扩展 ios 的网络请求

    我已经搜索过这个标题 但没有找到任何合适的信息 我找到了发出网络请求的方法 将其结果发送到包含应用程序的应用程序 但是 我想直接得到分机的响应并在那里显示信息 我遇到过一些使用 javascript 访问网页的方法 但没有向后端发出请求 是
  • 如何用javascript从pdf文件中提取文本? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 所以我想知道是否有一种方法可以在javascript中从pdf中提取文本 我已经调查了一些 npm 模块 例如 PDF TO TEXT
  • 如何在Windows不分配驱动器号的情况下创建分区?

    我正在尝试通过 Windows API 对附加的虚拟硬盘进行初始化和分区 我已经成功使用设备Io控制 http msdn microsoft com en us library windows desktop aa363216 28v vs
  • Google Adwords CSP(内容安全政策)img-src

    中包含哪些域 协议img src是否需要 Content Security Policy 标头指令才能允许 Google AdWords 转化跟踪 从测试来看 当我们打电话时google trackConversion 看起来浏览器会创建一
  • JDK16 和 Mac OS 上的 Mockito - 无法初始化插件

    java lang IllegalStateException Could not initialize plugin interface org mockito plugins MockMaker alternate null Cause
  • 测试 angular2 dart 组件

    我写了一个组件并想测试它 如何从组件编写测试 有没有 Angular dart 的测试框架 您可以使用test https pub dartlang org packages test包含实验测试实现的包https github com d
  • 防止我的nodejs服务器中的xhr攻击[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在开发一个将与客户端移动应用程序
  • Redux 中间件工作一半,但未完全取消操作

    我有一些简单的中间件 可以工作 但也不能工作 基本上我有一个用户列表 我正在尝试删除一个 然后与 firebase 同步 一切都很好 我添加了一些中间件 以便当用户删除一个中间件时 它会询问您是否确定 只需使用一个简单的alert目前 如果