connected-react-router
connected-react-router
这个库帮我们实现了在 中操作路由方法,并将路由变化的信息同步在redux
的store
安装
yarn add connected-react-router
第一步: 把 connectRouter( history ) 接入到 combineReducers()中间件里面。
把history
作为 rootReducer
的参数,最后返回 combineReducers( router:connectRouter( history ),...sagaReducer, ...thunkReducer )
// @func: 此文件只接受两个`reducer` 1个是`sagaReducer` 1个是`thunkReducer`
import { combineReducers } from 'redux';
import { connectRouter } from 'connected-react-router';
import { History } from 'history';
import sagaReducer from './saga/reducers';
import thunkReducer from './thunk/reducers';
const rootReducer = (history: History) => combineReducers({
router: connectRouter(history),
...sagaReducer,
...thunkReducer,
});
export default rootReducer;
第二步 把 routerMiddleware( history: History )集成到 react-redux 的中间件里面。
import { createStore, applyMiddleware, compose } from 'redux';
import { routinePromiseWatcherSaga } from 'redux-saga-routines';
import createSagaMiddleware from 'redux-saga';
import { createBrowserHistory } from 'history';
import { routerMiddleware } from 'connected-react-router';
import thunk from 'redux-thunk';
// import logger from 'redux-logger';
import rootReducer from './reducer';
import rootSaga from './saga/sagas';
export const history = createBrowserHistory();
// saga 的中间件
const sagaMiddleware = createSagaMiddleware();
// 创建一个增强器函数
const composeEnhancer =
(window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE_
? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})
: compose;
const store = createStore(
rootReducer( history ),
composeEnhancer(
applyMiddleware(
routerMiddleware(history),
sagaMiddleware,
thunk,
// logger,
),
));
sagaMiddleware.run(rootSaga);
sagaMiddleware.run(routinePromiseWatcherSaga);
export default store;
第三步 把 接入到入口文件里面。
import { Provider } from 'react-redux'
import { Route, Switch } from 'react-router' // react-router v4/v5
import { ConnectedRouter } from 'connected-react-router'
import configureStore, { history } from './configureStore'
...
const store = configureStore(/* provide initial state if any */)
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}> { /* place ConnectedRouter under Provider */ }
<> { /* your usual react-router v4/v5 routing */ }
<Switch>
<Route exact path="/" render={() => (<div>Match</div>)} />
<Route render={() => (<div>Miss</div>)} />
</Switch>
</>
</ConnectedRouter>
</Provider>,
document.getElementById('react-root')
)
index.js
...
import { Provider, ReactReduxContext } from 'react-redux'
...
<Provider store={store} context={ReactReduxContext}>
<App history={history} context={ReactReduxContext} />
</Provider>
...
app.js
...
const App = ({ history, context }) => {
return (
<ConnectedRouter history={history} context={context}>
{ routes }
</ConnectedRouter>
)
}
...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)