如何使用redux-saga推进历史路线

时间:2018-03-09 17:43:24

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

我正在使用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对象。 有关如何做到这一点的任何想法?

1 个答案:

答案 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);
}