REDUX
Ви також можете використовувати те, react-router-redux
що має goBack()
і push()
.
Ось пакет для вибірки для цього:
У точці входу додатка вам потрібен ConnectedRouter
, а іноді складний зв'язок - це history
об'єкт. Програмне забезпечення Redux слухає зміни історії:
import React from 'react'
import { render } from 'react-dom'
import { ApolloProvider } from 'react-apollo'
import { Provider } from 'react-redux'
import { ConnectedRouter } from 'react-router-redux'
import client from './components/apolloClient'
import store, { history } from './store'
import Routes from './Routes'
import './index.css'
render(
<ApolloProvider client={client}>
<Provider store={store}>
<ConnectedRouter history={history}>
<Routes />
</ConnectedRouter>
</Provider>
</ApolloProvider>,
document.getElementById('root'),
)
Я покажу вам спосіб підключення history
. Зауважте, як історія імпортується в магазин, а також експортується як одиночний, щоб її можна було використовувати в точці входу програми:
import { createStore, applyMiddleware, compose } from 'redux'
import { routerMiddleware } from 'react-router-redux'
import thunk from 'redux-thunk'
import createHistory from 'history/createBrowserHistory'
import rootReducer from './reducers'
export const history = createHistory()
const initialState = {}
const enhancers = []
const middleware = [thunk, routerMiddleware(history)]
if (process.env.NODE_ENV === 'development') {
const { devToolsExtension } = window
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension())
}
}
const composedEnhancers = compose(applyMiddleware(...middleware), ...enhancers)
const store = createStore(rootReducer, initialState, composedEnhancers)
export default store
Наведений вище приклад показує, як завантажувати react-router-redux
помічники програмного забезпечення, які завершують процес налаштування.
Я вважаю, що наступна частина є абсолютно додатковою, але я включу її лише на випадок, якщо хтось у майбутньому знайде користь:
import { combineReducers } from 'redux'
import { routerReducer as routing } from 'react-router-redux'
export default combineReducers({
routing, form,
})
Я використовую routerReducer
весь час, тому що це дозволяє мені змушувати перезавантажувати компоненти, які зазвичай цього не роблять shouldComponentUpdate
. Очевидний приклад - коли у вас є Nav Bar, який повинен оновлюватися, коли користувач натискає NavLink
кнопку. Якщо ви підете цією дорогою, ви дізнаєтесь, що використовується метод підключення Redux shouldComponentUpdate
. З routerReducer
, ви можете використовуватиmapStateToProps
для відображення змін маршрутизації в Nav Bar, і це призведе до оновлення, коли зміниться об’єкт історії.
Подобається це:
const mapStateToProps = ({ routing }) => ({ routing })
export default connect(mapStateToProps)(Nav)
Пробачте, поки я додаю кілька додаткових ключових слів для людей: якщо ваш компонент не оновлюється належним чином, досліджуйте shouldComponentUpdate
, видаливши функцію підключення та перевірте, чи вона усуне проблему. Якщо так, введіть routerReducer
і компонент оновиться належним чином, коли зміниться URL-адреса.
На завершення, зробивши все це, ви можете зателефонувати goBack()
абоpush()
будь-який час, коли захочете!
Спробуйте зараз у якомусь випадковому компоненті:
- Імпортувати в
connect()
- Вам навіть не потрібно
mapStateToProps
абоmapDispatchToProps
- Імпортуйте в goBack і натисніть
react-router-redux
- Дзвінок
this.props.dispatch(goBack())
- Дзвінок
this.props.dispatch(push('/sandwich'))
- Переживайте позитивні емоції
Якщо вам потрібно більше вибірки, перевірте: https://www.npmjs.com/package/react-router-redux