title: React SSR app is not loading routed component in mid of API request
body: <p>I'm creating a React SSR Project. I have achieved server-side rendering with Redux integrated.
  However When I go through some component using api with bulk data, then while it's loading, hit the Back button of browser, my route changes immediately, the data of that component is loaded but it is not displayed until the current component gets its data and renders it. </p>
  
  <p>So <strong><em>Is there any way to stop the async node server-side calling the data, as soon as the url changes, even if that async data hasn't come yet?</em></strong> I am using <strong>axios</strong> for now.</p>
  
  <p>This is my server render:</p>
  
  <pre><code>export default function serverRenderer({ clientStats, serverStats }) {
    return (req, res, next) =&gt; {
      const context = {};
      const pageContainer = req.pageContainer || {};
      const PAGE = pageContainers.default[pageContainer];
      if (!PAGE || typeof (PAGE.fetchData) !== 'function') {
        const markup = ReactDOMServer.renderToString(
          &lt;Provider store={store}&gt;
            &lt;StaticRouter location={req.url} context={context}&gt;
              &lt;RouteComp /&gt;
            &lt;/StaticRouter&gt;
          &lt;/Provider&gt;,
        );
        const helmet = Helmet.renderStatic();
        return res.status(200).send(Template({
          markup,
          helmet,
          state: store.getState(),
        }));
      }
      return PAGE.fetchData(store, req.urlparams).then(() =&gt; {
        const markup = ReactDOMServer.renderToString(
          &lt;Provider store={store}&gt;
            &lt;StaticRouter location={req.url} context={context}&gt;
              &lt;RouteComp /&gt;
            &lt;/StaticRouter&gt;
          &lt;/Provider&gt;,
        );
        const helmet = Helmet.renderStatic();
        res.status(200).send(Template({
          markup,
          helmet,
          state: store.getState(),
        }));
      }).catch((e) =&gt; {
        console.log('fetch data error:::', e);
      });
    };
  }
  </code></pre>
  
  <p>This is client.js</p>
  
  <pre><code>// Grab the state from a global variable injected into the server-generated HTML
  const preloadedState = window.__PRELOADED_STATE__;
  
  // Allow the passed state to be garbage-collected
  delete window.__PRELOADED_STATE__;
  
  // Create Redux store with initial state
  const store = createStore(reducer, preloadedState, applyMiddleware(thunk));
  
  hydrate(
    &lt;Provider store={store}&gt;
      &lt;BrowserRouter&gt;
        &lt;RouteComp /&gt;
      &lt;/BrowserRouter&gt;
    &lt;/Provider&gt;,
    document.getElementById('app'),
  );
  </code></pre>
  
  <p>This is a container which would have a static method for fetching data. The server calls fetchData of the matched Container</p>
  
  <pre><code>class HomeContainer extends Component {
    static fetchData(store) {
      const promises = [
        store.dispatch(fetchHomePageStarted()),
        getHomePageData()
          .then((response) =&gt; {
            const { data } = response;
            return store.dispatch(fetchHomePageSuccess(data));
          })
          .catch((error) =&gt; {
            console.log('error occurred -&gt; ', error);
            return store.dispatch(fetchHomePageFailed(error));
          }),
      ];
      return Promise.all(promises);
    }
  }
  </code></pre>