history.push
, используемый в эпической эпопее, в которой можно наблюдать редуксы, а не загружать только новые компоненты.Использование Link (реакции-маршрутизатора-dom) для прямого перехода к «new / path» прекрасно работает и загружает только компоненты, которые отличаются.
Приложение выглядит следующим образом:
В приложенииconfig:
const history = createHashHistory({
hashType: "slash",
})
<Provider store={store}>
<Router history={history}>
<RootContainer />
</Router>
</Provider>
const configureStore = (): Store => {
return createStore(
rootReducer,
applyMiddleware(createEpicMiddleware(rootEpic, {
dependencies: { history },
})),
)
}
В 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>, store: Store, { history }): ActionsObservable<Action> => (
action$.pipe(
ofType(SharedActions.OPEN_WINDOW),
mergeMap((action) => {
history.push(action.payload.url)
return Observable.empty()
}),
)
)
<Route>
s (из "Reaction-router-dom")рендер <Loadable>
(из "реагирующей загрузки")
package.json
"react": "^16.2.0",
"react-loadable": "^5.4.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",