我正在试图弄清楚正确的方法是什么。
让我们说我们有一个物品存储。可以编辑,删除和创建这些项目。编辑或添加项目时,路线将更改为/ item / add或/ item / edit / {id}。
在saga成功添加或编辑项目后,我们希望将它们发送回基本路线。什么是正确的方法来解决这个问题?
我已经看到了两种方式,one where you inject a history object进入a,然后在传奇中包含历史对象。另一个在项目存储中使用“状态”(“”,“失败”,“成功”)并在组件卸载时重置该状态,因为添加和编辑两者都需要使用状态。
这是解决这个问题的正确方法吗?
答案 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
。