如何在 saga 中成功调用 api 后更改 url

Phi*_*eng 4 reactjs react-router redux-saga

用例:

用户订阅后,我想导航到另一个页面,通知用户验证他们的电子邮件。

  try {
    const request = yield call(subcribe, action.payload.data)
    yield put({ type: SUBSCRIBE_SUCCESS, payload: request.data })
    yield put(showNotification(NOTIFICATION_SUCCESS, 'Please check your email.'))
  } catch(e) {
    ...
  }
Run Code Online (Sandbox Code Playgroud)

有没有办法导航到成功页面,即/subscribe-success一旦我收到服务器的成功响应?

Fur*_*anO 5

如果您从服务器收到成功响应,您应该将您的 redux 状态更改为类似 subsribeSuccess : true 的内容。这样您就有机会在组件的 componentWillReceiveProps(nextProps) 中检查此状态并执行 browserHistory.push('subscribe-success')。

这是一个例子:

假设您已将您的 redux 状态从 reducer 更改为 {...state, subscribeSuccess : true},当您的 reducer 获得 SUBSCRIBE_SUCCESS 操作类型时。

在您的反应组件上:

componentWillReceiveProps(nextProps){
  if(myConnectedReduxState.subscribeSuccess){
    browserHistory.push('subscribe-success');
  }
}
Run Code Online (Sandbox Code Playgroud)

所以据我所知,你的问题与传奇无关。你可以在你的 react-redux 项目中的任何地方实现这个逻辑。

  • 是的,你是对的,它不是特定于传奇的。感谢您的回复,它让我可以考虑在 react-router 中使用 push 函数,即 `import { push } from 'react-router-redux'` 然后像这样更改位置 `yield put(push('subscribe-成功'))`。我还在组件中实现了您建议的逻辑以呈现不同的视图。再次感谢! (3认同)