history.push ssr 时不会导致位置改变

history.push not causing the location to change when ssr

我有以下服务器代码:

  const store = configureStore({}, history);

  const context: any = { store };

  const app = (
    <Provider store={store}>
      <StaticRouter location={req.url} context={context}>
        <Application />
      </StaticRouter>
    </Provider>
  );
// render app

以及以下客户端连接的路由器:

    <Provider store={store}>
      <ConnectedRouter history={history}>
        <Application />
      </ConnectedRouter>
    </Provider>

我可以看到中间件已正确连接并且正在调用 history.push 方法 here

但是浏览器没有重定向。

什么会导致浏览器不重定向?

事实证明我有 2 个不同的历史实例,1 个在路由器中间件中,1 个在 ConnectedRouter

确保他们都有相同的实例解决了这个问题。

我有这个文件,我可以在任何需要的地方导入它:

import { createBrowserHistory } from 'history';
import { createMemoryHistory } from 'history';
import { RouterHistory } from '../types';
const selectedHistory: RouterHistory = typeof window !== 'undefined' ? createBrowserHistory : createMemoryHistory;

export const history = selectedHistory();

然后确保我导入此文件并且不复制历史记录的多个副本:

import { history } from '../../routes/history';
//etc.
          <ConnectedRouter history={history}>