React路由器在状态改变后不重新渲染
问题描述:
我有这样的反应组件与路由器。如果通过道具传递的登录页面是错误的,那么这将呈现登录页面道具是由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接收路径:“/”这可能是问题的原因。
答
问题出在react-redux-router
和react-router
的不兼容版本上。我已经更新了第一个,它的作用就像一个魅力。
我能看到的第一个问题是在' '组件之外有' '。尝试在' '内移动它,然后检查是否仍有问题。 –
我仍然有问题,如果我删除该重定向 – Haito