1

我遇到了ConnectedRouter没有更新路由更改历史记录的问题。 在路线变更商店获取更新历史和路由器(ConnectedRouter的孩子)获取更新历史,但ConnectedRouter的历史保持不变。该应用程序不呈现新的组件,但浏览器的网址更改。React Router Redux ConnectedRouter不更新路由更改

索引

import React from 'react' 
import ReactDOM from 'react-dom' 
import { Provider } from 'react-redux' 
import { ConnectedRouter } from 'react-router-redux' 
import AppContainer from './containers/app' 
import { history, store } from './store' 

ReactDOM.render(
    <Provider store={store}> 
    <ConnectedRouter history={history}> 
     <AppContainer /> 
    </ConnectedRouter> 
    </Provider>, 
    document.getElementById('root') 
) 

商店

import createHistory from 'history/createBrowserHistory' 
import { createStore, applyMiddleware, compose } from 'redux' 
import { routerMiddleware } from 'react-router-redux' 
import { rootReducer } from './reducers/root' 

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose 

export const history = createHistory() 
const middleware = routerMiddleware(history) 

export const store = createStore(
    rootReducer, 
    composeEnhancers(applyMiddleware(middleware)) 
) 

rootReducer

import { combineReducers } from 'redux' 
import { routerReducer } from 'react-router-redux' 

export const rootReducer = combineReducers({ 
    router: routerReducer, 
}) 

HeaderContainer

import { bindActionCreators } from 'redux' 
import { connect } from 'react-redux' 
import { withRouter } from 'react-router-dom' 
import { push } from "react-router-redux" 
import { HeaderTemplate } from '../components/templates/header' 

const mapStateToProps = state => ({}) 

const mapDispatchToProps = dispatch => 
    bindActionCreators({ 
    pushRoute: location => dispatch(push(location)), 
    }, dispatch) 

export default withRouter(
    connect(mapStateToProps, mapDispatchToProps)(HeaderTemplate) 
) 

HeaderTemplate

import React from 'react' 

export const HeaderTemplate = props => (
    <div className="content"> 
    <nav> 
     <ul> 
     <SomeLink onClick={() => props.pushRoute('/')}>Link1</SomeLink> 
     <SomeLink onClick={() => props.pushRoute('/test')}>Link2</SomeLink> 
     </ul> 
    </nav> 
    </div> 
) 

回答

0

这个问题有点混乱,但我想我知道你的问题。我不相信路由器可能是ConnectedRouter的孩子,你需要用ConnectedRouter替换路由器,一切都会按预期工作。

4

看起来你正在做的是包裹HeaderContainerwithRouter什么,但你实际上应与假设AppContainer有它的实际<Route />的内包装的AppContainer

除此之外,我要说的唯一的事情是要确保你跑:

npm install --save [email protected]

in order to user the ConnectedRouter