react-router v4 在页面更改时调度 redux 操作

IT技术 javascript reactjs redux react-router
2021-05-14 00:17:45

我希望在每次react-router页面更改时调度一个动作,然后由减速器拦截。

我的用例是:我将页面状态保存在 redux 存储中。状态表示为{loading, finished}当用户单击按钮时,会向服务器发出请求并loading变为true当响应回来正loading变得falsefinishedtrue当用户离开页面时,我希望状态重置为其初始值 ( loading= false, finished= false)。

以下答案很棒,但不再适用于 v4,因为onEnter onChangeonLeave已被删除。

React Router + Redux - 在路由更改时调度异步操作?

编辑:最好的解决方案是可扩展的。将来会有多个这样的页面,每个页面的状态都应该在页面导航时重置

谢谢!

2个回答

您可以history单独创建您的实例,并在发生变化时听取该实例并分派一个动作。

例子

// history.js
import createHistory from 'history/createBrowserHistory';

const history = createHistory();

history.listen(location => {
  // Dispatch action depending on location...
});

export default history;

// App.js
import { Router, Route } from 'react-router-dom';
import Home from './components/Home';
import Login from './components/Login';
import history from './history';

class App extends React.Component {
  render() {
    return (
      <Router history={history}>
        <div>
          <Route exact path="/" component={Home} />
          <Route path="/login" component={Login} />
        </div>
      </Router>
    )
  }
}

v4 具有location可用于检查应用程序是否已离开当前页面的对象。

https://reacttraining.com/react-router/web/api/location