我正在使用react,redux,saga和路由器v4。
我想在我的传奇中进行重定向,但我不知道如何访问history
对象,因为我正在使用BrowserRouter
。
我想做的事情看起来类似于:
export function * callWS (action) {
const result = yield call(data, ws)
if (result.status === 201) {
yield call(history.push, '/success')
}
}
但是,因为我正在使用BrowserRouter
,所以我从未创建过这个history
对象。
有关如何做到这一点的任何想法?
答案 0 :(得分:1)
我遇到了类似的问题,我提出了这个解决方案..
在您的app.js
中创建历史记录并将其导出:
import createHistory from 'history/createBrowserHistory';
const history = createHistory();
// ...
export { history };
然后在你的传奇中你可以创建一个处理导航的forwardTo
函数:
import { call, fork, takeLatest, cancel, take } from 'redux-saga/effects';
import { history } from 'app';
function* myFunction() {
try {
// do something
yield call(forwardTo, '/');
} catch(e){
// Do something
}
}
export default function* defaultSaga() {
const submitWatcher = yield fork(takeLatest, SOMETHING, submitForm);
yield take(LOCATION_CHANGE);
yield cancel(submitWatcher);
}
function forwardTo(location) {
history.push(location);
}