Для подключенного маршрутизатора React требуется React 16.4 и React Redux 6.0 или более поздней версии.
$ npm install --save connected-react-router
Or
$ yarn add connected-react-router
Использование Шаг 1
В вашем корневом файле редуктора
Создайте функцию, которая принимает историю в качестве аргумента и возвращает корневой редуктор. Добавьте редуктор маршрутизатора в корневой редуктор, передав историю в connectRouter. Примечание. Ключ ДОЛЖЕН быть маршрутизатором.
// reducers.js
import { combineReducers } from 'redux'
import { connectRouter } from 'connected-react-router'
const createRootReducer = (history) => combineReducers({
router: connectRouter(history),
... // rest of your reducers
})
export default createRootReducer
Шаг 2
При создании магазина Redux
Создайте объект истории. Предоставьте созданную историю создателю корневого редуктора. Используйте routerMiddleware(history), если вы хотите отправлять действия истории (например, чтобы изменить URL-адрес с помощью push('/path/to/somewhere')).
// configureStore.js
import { createBrowserHistory } from 'history'
import { applyMiddleware, compose, createStore } from 'redux'
import { routerMiddleware } from 'connected-react-router'
import createRootReducer from './reducers'
...
export const history = createBrowserHistory()
export default function configureStore(preloadedState) {
const store = createStore(
createRootReducer(history), // root reducer with router state
preloadedState,
compose(
applyMiddleware(
routerMiddleware(history), // for dispatching history actions
// ... other middlewares ...
),
),
)
return store
}
Шаг 3
Оберните маршрутизацию вашего реактивного маршрутизатора v4/v5 с помощью ConnectedRouter и передайте объект истории в качестве реквизита. Не забудьте удалить любое использование BrowserRouter или NativeRouter, так как оставление этого вызовет проблемы с синхронизацией состояния. Поместите ConnectedRouter в качестве дочернего элемента провайдера react-redux. Н.Б. Если вы выполняете рендеринг на стороне сервера, вы все равно должны использовать StaticRouter из react-router на сервере.
// index.js
import { Provider } from 'react-redux'
import { Route, Switch } from 'react-router' // react-router v4/v5
import { ConnectedRouter } from 'connected-react-router'
import configureStore, { history } from './configureStore'
...
const store = configureStore(/* provide initial state if any */)
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}> { /* place ConnectedRouter under Provider */ }
<> { /* your usual react-router v4/v5 routing */ }
<Switch>
<Route exact path="/" render={() => (<div>Match</div>)} />
<Route render={() => (<div>Miss</div>)} />
</Switch>
</>
</ConnectedRouter>
</Provider>,
document.getElementById('react-root')
)
person
muhammed suhair
schedule
12.10.2020