reactjs - 使用 react-router v4 升级实现 ConnectedRouter 的问题
问题描述
我升级为使用 react-router v4 (rr-v4) 并读到 react-router-redux 已被弃用,并且 rr-v4 使用 connected-react-router。这样做我现在收到以下错误:
该道具
location
在 中标记为必填ConnectedRouter
,但其值为undefined
。
我似乎无法弄清楚我做错了什么。我有很多代码,所以我将尝试分享相关的内容:
rootReducer:
import { combineReducers } from 'redux';
import { connectRouter } from 'connected-react-router'
import { reducer as oidcReducer } from 'redux-oidc';
...
const rootReducer = (history) => combineReducers({
routing: connectRouter(history),
oidc: oidcReducer,
...
export default rootReducer;
store.js:
import { createStore, applyMiddleware, compose } from 'redux';
import { routerMiddleware } from 'connected-react-router'
import { createBrowserHistory } from 'history'
...
export const history = createBrowserHistory()
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const initialState = {};
const createStoreWithMiddleware = composeEnhancers(
applyMiddleware(loggerMiddleware, routerMiddleware(history), thunkMiddleware)
)(createStore);
const store = createStoreWithMiddleware(rootReducer(history), initialState);
...
export default store;
index.js:
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { OidcProvider } from 'redux-oidc';
import store, { history } from './store';
import { App } from './App';
import userManager from './_helpers/userManager';
import { ErrorBoundary } from './_components/ErrorBoundary';
import "./web.config";
render(
<ErrorBoundary>
<Provider store={store}>
<OidcProvider store={store} userManager={userManager}>
<App history={history} />
</OidcProvider>
</Provider>
</ErrorBoundary>,
document.getElementById('app')
);
App.js:
import React from 'react';
import { ConnectedRouter } from 'connected-react-router'
import { Route, Switch } from 'react-router-dom';
...
class App extends React.Component {
constructor(props) {
super(props);
const { dispatch } = this.props;
}
...
render() {
const { history } = this.props;
return (
<ConnectedRouter history={history}>
<div>
<Route path="/" render={() => (<div>HOME</div>)} />
<Route path="/test" render={() => (<div>TEST</div>)} />
</div>
</ConnectedRouter>
);
}
}
解决方案
rootReducer 下的键必须是router
,而不是routing
。
推荐阅读
- javascript - 你能创建一个只有一个位置的数组吗?
- google-analytics - Google Analytics Reporting API - ga:mobileDeviceInfo 维度
- javascript - Angular http 请求将端口 4200 添加到我的每个请求
- python - 在 Numpy 和 Dask 中并行化 For 循环以创建多维直方图
- mysql - 在 MySQL Case Operator 的结果上添加一些文本
- vba - 将字符串表转换为对象表 VBA
- angularjs - 为什么我不能在同一个控制器中将 ng-material 指令与其他指令一起使用?
- azure - Azure Authenticated Web Api Error only with POST 调用
- javascript - 从 node_modules/@blueprintjs 导入样式显示错误“错误:找不到 '~@blueprintjs/core/lib/css/blueprint'”
- c++ - 使用正则表达式 C++ 计算数字中的小数位