Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React Redux with Redux observable异步操作完成后,使用路由器导航到不同的页面_Javascript_Reactjs_Redux_React Router_Rxjs - Fatal编程技术网

Javascript React Redux with Redux observable异步操作完成后,使用路由器导航到不同的页面

Javascript React Redux with Redux observable异步操作完成后,使用路由器导航到不同的页面,javascript,reactjs,redux,react-router,rxjs,Javascript,Reactjs,Redux,React Router,Rxjs,我正在使用,这是我的登录史诗: const login = ( action$ ) => { return action$.ofType(SessionActions.LOGIN_USER) .flatMap(( {payload} ) => { return sessionService.login(payload) .do(payload => { sessionService.setSessi

我正在使用,这是我的登录史诗:

const login = ( action$ ) => {
    return action$.ofType(SessionActions.LOGIN_USER)
      .flatMap(( {payload} ) => {
        return sessionService.login(payload)
          .do(payload => {
            sessionService.setSession(payload));
          // Here I want to redirect the user back to his last location
          }).map(result => ({
            type: SessionActions.LOGIN_SUCCESS,
            payload: result
          }));
      });
  }
但是我如何在登录操作成功后将用户重定向到不同的页面


redux的方法是什么?

我对react/redux完全陌生,但我面临着与您相同的问题,因此我创建了一个带有登录页面的小应用程序

// On your Login.JS you could implement the component lifecycle

componentWillReceiveProps(nextProps) {
    if (nextProps.isAuthenticated){
        this.context.router.push({pathname:'/'});
    }
}
因此,当您的“操作”向“减速器”发送类型:LOGIN\u SUCCESS时,您将更改相应的状态;当您的组件“接收道具”时,您将检查并重定向。我希望这个小示例对您有所帮助。

如果使用with,您可以在epics中执行任何重定向:

import { ajax } from 'rxjs/observable/dom/ajax';
import { push } from 'react-router-redux';
import NProgress from 'nprogress';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';

export default function login(action$) {
  return action$.ofType('LOGIN_USER')
    .do(() => NProgress.start())
    .mergeMap(payload => (
       // Call your login service here, please note that it must be an observable to continue in your epic chain.
       Observable.fromPromise(sessionService.setSession(payload))
         // This is the redirect you're looking for, it's now became an action thanks to react-router-redux :)
         .mapTo(push({ url: '/' }))
         .do(() => NProgress.done())
  ));
}

我甚至为奖励积分添加了一个进度指标:)它是在

的帮助下构建的,我并没有真正注意到mapTo的功能。非常感谢你。