在react-redux和redux-saga中,在异步调用成功后转换到新路由的正确方法是什么?

时间:2018-03-14 17:34:00

标签: reactjs react-redux redux-form redux-saga react-router-redux

我正在使用react,redux和redux-saga,以及react-router-redux。我正在寻找一种在正确的异步呼叫后转换到新路线的“正确”方式。

例如,用户提交订单并重定向到感谢页面。在幕后,我们

  • 当前路线为orders/new
  • dispatch(submitOrder())
  • submitOrder() saga运行,异步网络呼叫
  • api返回成功,SUBMIT_ORDER_SUCCESS操作已分派

此时我想转换到orders/:orderId/complete

在哪里/如何做到这一点的正确方法?

使用OrderFormContainer.componentWillReceiveProps()挂钩是可能的,检查像nextProps.submitDidSucceed这样的bool然后调用转换操作 - 但这很脆弱并且感觉从根本上是错误的。

1 个答案:

答案 0 :(得分:2)

您可以在传奇中使用push动作创建者导航到新位置:

import { push } from 'react-router-redux';

 //... your saga code
 // api return success
 yield put(SUBMIT_ORDER_SUCCESS); // your existing action
 yield put(push('/orders/:orderId/complete')); //  use push to redirect to desired location