`push` из" подключенного-реагирующего-маршрутизатора ", используемого в эпопее с наблюдением за редуксом, не меняет URL и отображает пустую страницу
push
от "connected-реакции-маршрутизатора", используемого в эпопее с наблюдением за редуксом, не меняет URL и отображает пустую страницу. state.router.location
никогда не изменяется, поэтому я думаю, что действие не отправляется должным образом, но компоненты больше не отображаются - это изменение, которое я не могу понять.
Приложение выглядит следующим образом:
В редукторах:
const rootReducer: Reducer<any, any> = history => combineReducers({
router: connectRouter(history),
})
В конфиге приложения:
const history = createBrowserHistory({
basename: ROOT_PATH,
})
<Provider store={store}>
<ConnectedRouter history={history}>
<RootContainer />
</ConnectedRouter>
</Provider>
const configureStore = (): Store => {
return createStore(
rootReducer(history),
applyMiddleware(createEpicMiddleware(rootEpic)),
)
}
В RootContainer.js
import { withRouter } from "react-router-dom"
const Root = withRouter(connect(mapStateToProps, mapDispatchToProps)(RootComponent))
export default Root
В эпопеях:
import { push } from "connected-react-router"
const navigateTo = (action$: ActionsObservable<Action>): ActionsObservable<Action> => (
action$.pipe(
ofType(SharedActions.OPEN_WINDOW),
mergeMap((action) => {
return of(push(action.payload.url))
}),
)
)
package.json
"connected-react-router": "^5.0.1",
"react": "^16.2.0",
"react-router": "^4.2.0",
"react-router-dom": "^4.2.2",
"redux": "^3.6.0",
"redux-observable": "^0.17.0",
"rxjs": "^5.5.7",
У меня нет горячей замены модуля, как в этом примере, но я думаю, что это не связано.
ОБНОВИТЬ:
Я добавил эпопеи для прослушивания:
import { CALL_HISTORY_METHOD, LOCATION_CHANGE, push } from "connected-react-router"
Похоже, что отправляется следующее действие:
{
type: "@@router/CALL_HISTORY_METHOD"
payload: {
args: [ "new/path" ]
method: "push"
}
}
Это просто не влияет на URL.
ОБНОВИТЬ
Кроме того, использование Link (реакции-маршрутизатора-dom) для прямой навигации к "новому / пути" прекрасно работает внутри компонентов, поэтому путь правильный.
0 ответов
Похоже, вы забыли добавить routerMiddleware
при создании своего магазина Redux:https://github.com/supasate/connected-react-router
Конфигурация вашего приложения выше должна быть:
import { routerMiddleware } from "connected-react-router";
const history = createBrowserHistory({
basename: ROOT_PATH,
})
<Provider store={store}>
<ConnectedRouter history={history}>
<RootContainer />
</ConnectedRouter>
</Provider>
const configureStore = (): Store => {
return createStore(
rootReducer(history),
applyMiddleware(
createEpicMiddleware(rootEpic),
routerMiddleware(history),
),
)
}