2017-04-05 30 views
1

我花了好几天的时间来解决这个问题,我不知道它会是什么。我已经测试了一切。反应路由器browserHistory.push('/')不能在码头服务器上工作,在本地工作

我在本地有一个ReactJS项目设置,我有一个登录页面,然后将您重定向到一个页面,然后几个页面需要登录才能查看它们。这一切都在当地完美运作。当我将它推送到应该与我的环境完全相同的登台服务器时,它是一个码头环境,那么这一个功能就会中断:登录时它不会将URL更改为“/”,它只会保持“ /登录”。页脚和标题都出现(他们只能设置为显示一旦登录),所以我不知道为什么会发生这种情况。

我可以点击菜单链接,并按预期转到任何页面,似乎只是自动重定向不起作用。

的代码(删除无关的代码):

import React, { Component, PropTypes } from 'react'; 
import { connect } from 'react-redux'; 
import { 
    Alert, 
} from 'react-bootstrap'; 
import { browserHistory } from 'react-router'; 
import { login } from '../../Actions/login'; 

class LoginForm extends Component { 
    static propTypes = { 
     login: PropTypes.func.isRequired, 
     loggedIn: PropTypes.bool.isRequired, 
     loggingIn: PropTypes.bool.isRequired, 
     error: PropTypes.bool, 
    } 

    static contextTypes = { 
     router: PropTypes.object, 
    }; 

    constructor(props) { 
     super(props); 
     this.state = { 
      email: null, 
      password: null, 
      invalidEmail: false, 
      invalidPassword: false, 
     }; 
    } 

    componentWillReceiveProps(nextProps) { 
     if (nextProps.loggedIn) { 
      this.context.router.push('/'); 
      //browserHistory.push('/'); 
     } 
    } 
} 

我曾经尝试都:this.context.router.push('/');browserHistory.push('/');,都工作在本地,但在服务器上没有工作。

回答

0

尝试this.context.router.history.push('/')。 我以前遇到过同样的问题,而且这个问题解决了。虽然我找不到任何文档。

+0

我得到:this.context.router.history未定义 –

+0

你使用的时候'this.context.router.push( '/')得到任何错误;'或'browserHistory.push( '/');' ? –

+0

没有这两个在本地工作正常,但没有在服务器上..我不知道为什么它不适用于什么应该是相同的环境。 –

0

在我们当前的堆栈中发生了同样的事情,其中​​包括webpack2(babel v6),react-router v4,react-router-redux v5alpha和history v4。

生产包发生了一些差异。 尽管路由在webpack-dev-server(包括historyApiFallback)上的开发环境中完美工作,但由码头包容器内的nginx提供的生产捆绑更改了url,但在那里停止。虽然@@路由器变更操作被分派。

什么解决了我们的问题是在应用程序周围使用HOC包装withRouter

https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/withRouter.md

我们假设问题进去了开发ENV未被发现导致

import { AppContainer } from 'react-hot-loader' 

if (module.hot) { 
    module.hot.accept('./App',() => { 
     const NextApp = require('./App').default 
     ReactDOM.render(wrapedApp(NextApp, store), rootEl) 
    }) 
} 

重新描绘irregardless。

相关问题