Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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路由器检测到位置更改_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 防止react路由器检测到位置更改

Javascript 防止react路由器检测到位置更改,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,在我基于React/Redux的应用程序中,我实现了如下注销 在reducers/index.js中,我创建了一个名为appReducer的应用程序级reducer。在那里,我检查注销操作,然后返回未定义 这一切都很好。我想做的是,对于注销操作,我还想清除本地存储并重定向到登录页面。请注意,我想重定向本机浏览器的方式,而不是使用反应路由器。如果我做了window.location='/'。首先它被react路由器检测到,我看到登录页面有一点,然后它刷新,这有点奇怪 有没有办法防止react ro

在我基于React/Redux的应用程序中,我实现了如下注销

reducers/index.js
中,我创建了一个名为
appReducer
的应用程序级reducer。在那里,我检查
注销
操作,然后返回
未定义

这一切都很好。我想做的是,对于
注销
操作,我还想清除
本地存储
并重定向到登录页面。请注意,我想重定向本机浏览器的方式,而不是使用反应路由器。如果我做了
window.location='/'
。首先它被react路由器检测到,我看到登录页面有一点,然后它刷新,这有点奇怪


有没有办法防止react router在位置更改时收到通知

你不能完全阻止它,但你可以通过访问 历史。监听功能

使用React Router 4,您可以使用HOC withRouter包装顶级组件

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App));
这允许访问This.props.history并对其进行控制

  class App extends Component {
  constructor(props) {
    super(props);

    this.props.history.listen((location, action) => {
      //here you can control the location change
    });
  }

  render() {
     return (
         </div>
      );
  }
}

listenBefore不是上的函数history@earl3s似乎现在称为.block()()
history.listenBefore( (location, done) => doSomething(location).then(done) )