成功传奇后更改路线

时间:2017-07-06 20:16:57

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

我正在试图弄清楚正确的方法是什么。

让我们说我们有一个物品存储。可以编辑,删除和创建这些项目。编辑或添加项目时,路线将更改为/ item / add或/ item / edit / {id}。

在saga成功添加或编辑项目后,我们希望将它们发送回基本路线。什么是正确的方法来解决这个问题?

我已经看到了两种方式,one where you inject a history object进入a,然后在传奇中包含历史对象。另一个在项目存储中使用“状态”(“”,“失败”,“成功”)并在组件卸载时重置该状态,因为添加和编辑两者都需要使用状态。

这是解决这个问题的正确方法吗?

3 个答案:

答案 0 :(得分:3)

过去,我已将 react-router v3 react-router-redux 集成用于调度更改路由的操作。

React路由器4有一个react-router-redux包,它仍处于 alpha阶段。虽然它是alpha版,但这个功能对我来说很好,但你应该亲自检查一下。

在你的传奇中,你可以使用put效果来发送动作:

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

yield put(push('/route'));

答案 1 :(得分:1)

没有合适的方法,随便什么都可以。我更喜欢最小的:

//history.js
...
export const history = createHistory();


//Root.js
import { history } from './history';
<Root history={history}>

//mySaga.js
import { history } from './history';
function *mySaga() {
    yield call(history.push, '/myRoute');
}

答案 2 :(得分:0)

检查此文档:https://reacttraining.com/react-router/core/guides/redux-integration

根据此文档,最佳解决方案是在操作的有效负载中包含history对象(提供给所有路由组件),并且异步处理程序可以在适当的时候使用它进行导航。

如果从有效负载到操作有history个对象,则可以使用

history.push('requiredRoute');

requiredRoute