React路由器在状态改变后不重新渲染

时间:2017-07-18 13:18:27

标签: reactjs redux react-router react-router-redux

我有这样的反应组件与路由器。如果通过props传递的登录名为false,则将呈现登录页面。道德是由redux州推动的。

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,我的浏览器中的路径正在更改,历史记录对象知道该路径更改,但我仍然看到呈现的Login组件并且console.log(logged)未被第二次调用

有谁知道实际上是什么问题?

- EDIT-- 经过一番调查后,我将这个位代码添加到init:

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

第一个日志中的历史记录具有正确的路径,但是在历史记录收到路径名后会立即显示:“/”这可能是导致问题的原因。

1 个答案:

答案 0 :(得分:2)

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