我有一个带有 React-Router 的 React-Redux 应用程序,并且connected-react-router
(能够在 redux 操作中更改位置):
const main = () => {
hydrate(
<AppContainer warnings={false}>
<Provider store={store}>
<ConnectedRouter history={history}>
<Switch>
{renderRoutes(routes)}
</Switch>
</ConnectedRouter>
</Provider>
</AppContainer>,
mountApp
);
};
要更改 redux 操作中的位置,我这样做:
import { push } from 'connected-react-router';
...
export const gotoProjects = () => {
return async dispatch => {
dispatch(push('/projects'));
};
};
这很好用,但我遇到了我不理解的行为:
当我通过 redux 操作触发位置时,一切正常。但是,当我使用 url 重新加载页面(= 浏览器刷新)时,将调度/projects
一个@@router/LOCATION_CHANGE
动作。/
而且这种位置变化只发生在production
模式中。在development
模式 (with react-hot-loader
) 中,url 被正确加载。
如果我在和模式下都替换ConnectedRouter
为一切都很好。BrowserRouter
react-router-dom
production
development
在路由的初始渲染中,历史对象看起来像这样(如预期的那样):
{
"history": {
"length": 6,
"action": "POP",
"location": {
"pathname": "/projects",
"search": "",
"hash": ""
}
}
}
但不知何故,ConnectedRouter
它做了一个重定向。
欢迎任何帮助!
编辑:这是路线代码:
const routes = [
{
path: '/',
exact: true,
component: Home,
},
{
path: '/projects',
exact: true,
component: Projects,
},
...
];