2017-07-18 271 views
2

我有这样的反应组件与路由器。如果通过道具传递的登录页面是错误的,那么这将呈现登录页面道具是由redux状态推动的。React路由器在状态改变后不重新渲染

const Root = ({logged, history}) => { 
    console.log(logged); 
    return (
    <div className="App"> 
     <Router history={history}> 
     <div> 
      <Route exact path="/" component={ATM} /> 
      <Route path="/login" component={LoginForm}/> 
     </div> 
     </Router> 
     //Removed without effect-->{!logged ? <Redirect to="/login"/> : ""} 
    </div> 
) 
}; 

const fromState = (state) => ({ 
    logged: state.auth.logged 
}); 

export default connect(fromState)(Root) 

在我的登录组件中,我已经黑了一个调用,要求服务器用户是否已成功验证并重定向,如果是这种情况。

this.props.dispatch(action).then((result) => { 
    let responseCode = result.payload.status; 
    if(responseCode === 200) { 
    this.props.dispatch(push("/")) 
    } 
}) 

在我的应用我已经定义了历史,比如:

let blankHistory = createHistory(); 
let store = storeCreator(blankHistory); 
const history = syncHistoryWithStore(blankHistory,store); 

商店创造者适用中间件和减速器,采用历史作为一个参数,因为routerMiddleware需要它。

之后,被称为状态正在改变,日志成为true,我的浏览器中的路径正在改变,历史对象知道该路径的变化,但我仍然看到呈现登录组件和console.log(logged)不被称为第二次。

有谁知道究竟是什么问题?

- 编辑 - 后位的调查,我添加此位代码初始化:

let history = syncHistoryWithStore(blankHistory,store); 
console.log(history.location) 
history.listen((something) => { 
    console.log(something) 
}); 

和历史中第一个日志具有正确的路径,但历史后immedietaly接收路径:“/”这可能是问题的原因。

+0

我能看到的第一个问题是在''组件之外有''。尝试在''内移动它,然后检查是否仍有问题。 –

+0

我仍然有问题,如果我删除该重定向 – Haito

回答

2

问题出在react-redux-routerreact-router的不兼容版本上。我已经更新了第一个,它的作用就像一个魅力。

相关问题