Предыдущее решение не сработало, поэтому вот мой обновленный ответ: я думаю, что вам лучше всего послушать тип действия LOCATION_CHANGE
connected-react-router
и отправить Вы выбираете Subreddit там. Использование LOCATION_CHANGE
недокументировано в проекте connected-react-router
, однако docs старого проекта response-router-redux делает упомяните об этом.
На самом деле мы можем создать функцию промежуточного программного обеспечения для этого:
import { LOCATION_CHANGE } from 'connected-react-router'
import { selectSubreddit } from './actions';
export const listenRouteMiddleware = ({ dispatch, getState }) => (next) => (action) => {
if (action.type === LOCATION_CHANGE) {
const { pathname } = action.payload.location;
if (pathname !== '/') {
const pathArray = pathname.split('/');
const selectSub = pathArray[pathArray.length - 1];
next(action); // before dispatch, otherwise history breaks
dispatch(selectSubreddit(selectSub));
return;
}
}
next(action);
}
Затем добавьте его в другое промежуточное ПО:
import thunkMiddleware from 'redux-thunk'
import { createBrowserHistory } from 'history'
import { applyMiddleware, compose, createStore } from 'redux'
import { routerMiddleware } from 'connected-react-router'
import createRootReducer from './reducers'
import { listenRouteMiddleware } from './middleware';
export const history = createBrowserHistory()
export default function configureStore(preloadedState) {
const store = createStore(
createRootReducer(history), // root reducer with router state
preloadedState,
compose(
applyMiddleware(
listenRouteMiddleware,
routerMiddleware(history), // for dispatching history actions
thunkMiddleware
// ... other middlewares ...
),
),
)
return store
}
Измените обработчик изменений, чтобы выдвигать новый URL только после выбора параметра:
handleChange(nextSubreddit) {
this.props.dispatch(push('/' + nextSubreddit))
}
Вот и все! Чтобы увидеть рабочий пример, проверьте: Редактор , Приложение