使用mapDispatchToProps时Promise不返回

2024-01-01

最近,我从使用一种乐观操作转变为添加另外两种乐观操作来检测成功/失败服务器响应。

通过乐观的方法,我能够通过速记方式和承诺的链条传递我的行动:

class Post extends Component {
  onUpdateClick(props) {
    this.props.updatePost(this.props.params.id, props)
      .then(() => /* Action goes here */);
  }
}

...

export default connect(mapStateToProps, { updatePost })(Post);

现在我正在分派多个操作并使用mapDispatchToProps该操作返回未定义。

Uncaught (in promise) TypeError: Cannot read property 'then' of undefined

这里发生了什么?请注意,我正在使用redux-promise.

function mapDispatchToProps(dispatch) {
  return {
    dispatch(updatePost(id, props))
      .then(result => {
        if (result.payload.response && result.payload.response.status !== 200) {
         dispatch(updatePostFailure(result.payload.response.data));
        } else {
         dispatch(updatePostSuccess(result.payload.data));
        }
      });
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(Post);

export function updatePost(id, props) {
  const request = axios.put(`${ROOT_URL}/posts/${id}`, props);

  return {
    type: UPDATE_POST,
    payload: request,
  };
}

export function updatePostSuccess(activePost) {
  return {
    type: UPDATE_POST_SUCCESS,
    payload: activePost,
  };
}

export function updatePostFailure(error) {
  return {
    type: UPDATE_POST_FAILURE,
    payload: error,
  };
}

const initialState = { 
  activePost: { post: null, error: null, loading: false },
};

export default function(state = initialState, action) {
  let error;

  switch (action.type) {
    case UPDATE_POST: {
      return { ...state, activePost: { ...state.post, loading: true, error: null } };
    }

    case UPDATE_POST_SUCCESS: {
      return { ...state, activePost: { post: action.payload, loading: false, error: null } };
    }

    case UPDATE_POST_FAILURE: {
      error = action.payload || { message: action.payload.message };

      return { ...state, activePost: { ...state.activePost, loading: false, error: error } };
    }
  }
}

你的语法mapDispatchToProps函数似乎不正确。 它必须返回一个包含方法作为属性的对象。

尝试写这样的东西:

function mapDispatchToProps(dispatch) {
  return {
    updatePost() {
      return dispatch(updatePost(id, props))
        .then(result => {
          if (result.payload.response && result.payload.response.status !== 200) {
           return dispatch(updatePostFailure(result.payload.response.data));
          }
          return dispatch(updatePostSuccess(result.payload.data));         
        });
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用mapDispatchToProps时Promise不返回 的相关文章

  • 获取被调用的 javascript 文件的查询字符串

    是否可以在调用的 javascript 文件上使用 javascript 获取查询参数 如下所示 in html in file js console log this location query 这是否可能以某种方式实现 或者我必须使用
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?

    我正在尝试使用 ASP NET MVC Ajax BeginForm 帮助程序 但不想在调用完成时使用现有的内容插入选项 相反 我想使用自定义 JavaScript 函数作为回调 这可行 但我想要的结果应该以 JSON 形式返回 不幸的是
  • Angular UI 路由器嵌套视图问题

    我在理解 Angular UI Router 嵌套视图的工作原理时遇到了一些问题 我的 stateProvider 看起来像这样 stateProvider state login url login views main template
  • 更新存储在 chrome 扩展本地存储中的对象

    我正在开发一个 chrome 扩展 我将存储服务器发送的对象 例如 我将收到 命令 id 1 类型 A 大小 B 优先级 C 如果我有一个数据库 我会将其作为表中的一行插入commands 使用 chrome storage 我将这些对象的
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • jquery 中的函数返回未定义[重复]

    这个问题在这里已经有答案了 我在 jquery 中调用的函数返回未定义 我检查了该函数 当我对其进行调试时 它返回正确的数据 function addToPlaylist component type add to pl value pl
  • 如何在 JSX 中使用 switch case:ReactJS

    我的反应应用程序中导入了四个组件 我如何有条件地渲染组件之一 基于道具 这就是我想做的
  • Firefox Addon 中的 JQuery 导致多个警告

    我在 Firefox 插件中使用 jquery 但我不断收到大量警告消息 如下所示 anonymous function does not always return a value System JS WARNING resource g
  • node.js 模块/导出系统:是否可以将模块导出为函数

    我想在 Dispatch js 中做这样的事情 function handle msg exports handle 这在调用index js中 var dispatch require Dispatch dispatch data 有任何
  • 为什么 call 比 apply 快那么多?

    我想知道是否有人知道why call比apply 在 Chrome 中 速度大约快 4 倍 在 Firefox 中快 30 倍 我什至可以制作自定义原型 apply2 在大多数情况下 运行速度是apply 这个想法取自角度 Function
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • 如何在 React Native 中使用相同的 Firebase 数据库在两个应用程序之间进行通信?

    我有两个不同的应用程序使用相同的实时数据库 在第一个应用程序中 我发送的订单包含一些要保存在数据库中的数据字段 在另一个应用程序中 我只添加一个侦听器 firebase database ref userOrder currentUser
  • onPress 方法中箭头函数与普通函数的行为

    正在学习 Native React 并学习更多关于 javascript 的知识 所以我仍然不明白它的行为的很多事情 我使用 TouchableOpacity 及其 onPress 属性创建了一个按钮组件 为了让它工作 我必须发送我想要执行
  • jQuery Mobile + Admob:轮换?

    我使用 jQuery Mobile 框架创建了一个移动应用程序 所有页面都在index php中加载 使用 div 在每个页面的页脚中 我添加了Admob代码 div div div
  • Vue - 调度完成后调用 store getter?

    我正在使用 Laravel 5 7 Vue2 Vuex 我在调度调用完成后让 Vue 返回存储值时遇到一些困难 我的申请流程如下 我单击一个提交按钮 该按钮调用组件上的 validate Validate 分派到我的 addLease 操作
  • 将引导程序弹出框保留在视口内

    我正在尝试使用带有按钮的侧边栏创建一个菜单 每个按钮都有一个指定的包含相关数据的弹出窗口 不幸的是 其中一个弹出窗口可能包含任意数量的行 并且在某些情况下它可能部分位于视口之外 See http jsfiddle net bfd9f 1 h

随机推荐

  • 如何通过jquery隐藏没有id/class的div?

    如何使用 jQuery 隐藏第一个 第二个 div Div 无法获取 id class div p ssssssss p div div p ttttttttt gt p div div p fffff p div 隐藏第一个 div 元素
  • Form1_KeyDown 不起作用

    private void Form1 KeyDown object sender KeyEventArgs e if listBox1 Items Contains e KeyCode listBox1 Items Remove e Key
  • 在 C++ 中添加双精度数和复数

    考虑一下这段代码 include
  • 通过使用网格视图中的图像按钮在代码隐藏中调用函数

    我有一个ImageButton在一个GridView在 aspx 上clicking this ImageButton我必须调用一个函数 这就是我尝试的方法 但该函数没有被调用 aspx页面内的代码
  • 使用自动布局检索子视图的正确位置

    我想以编程方式将视图放置在故事板中创建的所有子视图的中心 在故事板中 我有一个视图 在一个垂直 StackView 内部 它具有填充全屏的约束 分布 等间距 在垂直堆栈视图内部 我有 3 个水平堆栈视图 约束高度 100 超级视图的尾随和前
  • VS2008:项目现在需要很长时间才能打开

    昨天下午 Visual Studio 2008 突然开始需要很长时间才能打开 ASP NET Web 窗体 项目 几个月后没有出现任何问题 这个问题似乎是在我尝试将 CrystalDecisions Enterprise dll 和 Cry
  • 在 R Shiny 中使用并行 foreach 制作进度条

    我正在尝试添加一个进度条ocr data 在 for 循环中 但是当串联使用时 该过程非常慢 我正在尝试利用并行来加快生成表的过程ocr data x 代码粘贴在这里 ui lt fluidPage Application title ti
  • 如何在Android上的文本视图中对长文本进行文本换行

    在我的应用程序中 我有包含长文本的文本视图 我需要像 android 模拟器 gt 联系人 gt 电话 屏幕上没有联系人拨号盘 那样的文本换行 but in my application i get text wrapping as fol
  • HTML5 画布中的碰撞检测。也优化了

    我正在制作一个平台游戏 但我的碰撞检测有问题 我创建了一个在屏幕 地图上绘制图块的函数 在该函数中是我的碰撞检测 当仅绘制一个图块时它工作正常 但是当我用三个图块创建 楼梯 时 第一个图块无法正常工作 玩家只是被 推 到图块上 侧面检测不起
  • iTunes Store 操作失败。您必须为此请求提供 CFBundleIdentifier

    我刚刚注册了这个地方 我已经制作了应用程序 一切正常 应用程序所有证书和文件都已更新 但是当我尝试从 Xcode 上传到应用程序商店时 我不断收到此错误 如果有人能帮我解决它 那就太好了 谢谢 iTunes Store 操作失败 您必须为此
  • 如何解除 Xcode 5 项目的工作副本与已失效的 SVN 服务器的关联

    我有一个 Xcode 5 项目的修改工作副本 该副本是从不再可用的远程 svn 服务器签出的 如何删除工作副本的 svn 关联并使其不受源代码控制 最终我想基于工作副本创建一个 git 存储库并将修改推送到它 我不需要保留 svn 历史记录
  • 读取文件时Python enumerate() tqdm 进度条?

    当我使用此代码迭代打开的文件时 我看不到 tqdm 进度条 with open file path r as f for i line in enumerate tqdm f if i gt start and i lt end print
  • 如何以 AMD 方式集成 Foundation 3

    EDIT 4 有一个模块定义在 来 自Foundation 3包裹 app js function window undefined use strict var doc document Modernizr window Moderniz
  • 在 Rails 上实现类似 Twitter 的主题标签

    我想在我的应用程序上实现类似 Twitter 的主题标签 假设我有用户输入到文本区域 我从 paris 来到 london 然后我想构建主题标签的标签云 我正在考虑使用 acts as ttagable on 因此 我从后端的文本中找到所有
  • 无法点击带有 ajax 加载的按钮

    我正在将内容加载到 result div 中 在该内容中 有一个按钮 使用ajax加载内容后 我无法单击该按钮 我没有收到警报 页面看不到
  • 为docker容器分配IP地址?

    我是 Docker 新手 是否可以将 IP 地址 从 DHCP 服务器 分配给在主机或虚拟机上运行的 Docker 容器 如果是 有人可以指出我正确的方向吗 如果不是 这是否是容器方法的基本限制 或者只是 Docker 中尚未提供的功能 D
  • 在 Java 中重构代码,替代大型 if 语句

    我正在重构我正在处理的项目中的一些代码 并且遇到了一个遵循以下格式的大型 if else if 语句 if changer instanceof AppleChanger panel new ApplePanel else if chang
  • Android 小部件 ImageButton 在屏幕旋转时丢失图像

    我的主屏幕上有一个小部件 其中有几个具有默认背景图像的图像按钮 通过配置活动 我可以更改任何 ImageButton 上的图像 问题是 当屏幕旋转时 ImageButton 上的图像消失并变回默认图像 我不知道为什么会发生这种情况或如何解决
  • 没有域名的 SSL 证书

    我有一堆 node js 应用程序通过 websockets ws 向 apache 站点提供信息 网站本身没有域名并通过其 IP 地址进行访问 不幸的是 这是不可协商的 问题如下 如果没有安全连接 浏览器将阻止 ws 交通量 所以我必须使
  • 使用mapDispatchToProps时Promise不返回

    最近 我从使用一种乐观操作转变为添加另外两种乐观操作来检测成功 失败服务器响应 通过乐观的方法 我能够通过速记方式和承诺的链条传递我的行动 class Post extends Component onUpdateClick props t