【发布时间】:2018-11-18 04:54:11
【问题描述】:
更新此问题以使用connected-react-router 而不是react-router-redux,因为它与react-router v4 不兼容。
调度操作时,我的路由似乎无法正常工作。我怀疑这是因为我使用的 sagas 配置不正确。
我有一个传奇:
import { call } from 'redux-saga/effects'
import { push } from 'connected-react-router'
//...
yield call(push, '/dashboard')
尽管 webdev 工具中的 redux 日志显示操作已成功调度,但推送功能不会将浏览器重定向到指定路径。
顶级 index.js 文件如下所示:
import createSagaMiddleware from 'redux-saga'
import rootSaga from './redux/sagas'
import React from 'react'
import ReactDOM from 'react-dom'
import { Provider } from 'react-redux'
import logger from 'redux-logger'
import App from './App'
import registerServiceWorker from './registerServiceWorker'
import rootReducer from './redux/modules'
import { applyMiddleware, compose, createStore } from 'redux'
import { createBrowserHistory } from 'history'
import { routerMiddleware, connectRouter } from 'connected-react-router'
const history = createBrowserHistory()
const sagaMiddleware = createSagaMiddleware()
const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
const store = createStore(
connectRouter(history)(rootReducer),
composeEnhancer(
applyMiddleware(
sagaMiddleware,
routerMiddleware(history),
logger
)
)
)
sagaMiddleware.run(rootSaga)
const render = () => {
ReactDOM.render(
<Provider store={store}>
<App history={history} />
</Provider>,
document.getElementById('root')
)
}
render()
registerServiceWorker()
包含根组件的 App.js 文件有:
import { ConnectedRouter } from 'connected-react-router'
import { Route, Switch, Redirect } from 'react-router-dom'
const App = ({ history }) => {
return (
<ConnectedRouter history={history}>
<Switch>
{ routes }
</Switch>
</ConnectedRouter>
)
}
export default App
此设置中缺少什么以使其正常工作?
依赖版本:
"react-redux": "^5.0.7",
"react-router": "^4.2.0",
"react-router-dom": "^4.2.2",
"connected-react-router": "^4.3.0"
【问题讨论】:
-
请注意,
react-router-redux@5.0.0-alphaXX可与react-router@4.X.X正常工作 -
@Simpleton 我发布了我的解决方案。不知道它是否正确,但似乎对我有用。你找到其他解决方案了吗?
标签: reactjs redux react-router react-router-v4