REDUXIEREN
Sie können auch verwenden, react-router-redux
was hat goBack()
und push()
.
Hier ist ein Sampler Pack dafür:
Im Einstiegspunkt Ihrer App benötigen Sie ConnectedRouter
, und eine manchmal schwierige Verbindung zum Anschließen ist das history
Objekt. Die Redux-Middleware hört Änderungen im Verlauf ab:
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'),
)
Ich werde Ihnen einen Weg zeigen, das anzuschließen history
. Beachten Sie, wie der Verlauf in den Store importiert und auch als Singleton exportiert wird, damit er im Einstiegspunkt der App verwendet werden kann:
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
Der obige Beispielblock zeigt, wie die react-router-redux
Middleware-Helfer geladen werden, die den Setup-Vorgang abschließen.
Ich denke, dieser nächste Teil ist komplett extra, aber ich werde ihn aufnehmen, nur für den Fall, dass jemand in Zukunft Nutzen findet:
import { combineReducers } from 'redux'
import { routerReducer as routing } from 'react-router-redux'
export default combineReducers({
routing, form,
})
Ich benutze die routerReducer
ganze Zeit, weil es mir erlaubt, das Neuladen von Komponenten zu erzwingen, die normalerweise nicht aufgrund von shouldComponentUpdate
. Das offensichtliche Beispiel ist, wenn Sie eine Navigationsleiste haben, die aktualisiert werden soll, wenn ein Benutzer eine NavLink
Taste drückt . Wenn Sie diesen Weg gehen, werden Sie erfahren, dass die Verbindungsmethode von Redux verwendet shouldComponentUpdate
. Mit routerReducer
können Sie mapStateToProps
Routing-Änderungen in der Navigationsleiste zuordnen. Dadurch wird die Aktualisierung ausgelöst, wenn sich das Verlaufsobjekt ändert.
So was:
const mapStateToProps = ({ routing }) => ({ routing })
export default connect(mapStateToProps)(Nav)
Verzeihen Sie mir, während ich einige zusätzliche Schlüsselwörter für Personen hinzufüge: Wenn Ihre Komponente nicht ordnungsgemäß aktualisiert wird, überprüfen Sie dies, shouldComponentUpdate
indem Sie die Verbindungsfunktion entfernen und prüfen, ob das Problem dadurch behoben wird. Wenn dies der Fall ist, ziehen Sie die routerReducer
und die Komponente wird ordnungsgemäß aktualisiert, wenn sich die URL ändert.
Abschließend können Sie nach all dem anrufen goBack()
oder push()
jederzeit!
Versuchen Sie es jetzt in einer zufälligen Komponente:
- Importieren in
connect()
- Du brauchst nicht einmal
mapStateToProps
odermapDispatchToProps
- In goBack importieren und von drücken
react-router-redux
- Anruf
this.props.dispatch(goBack())
- Anruf
this.props.dispatch(push('/sandwich'))
- Erleben Sie positive Emotionen
Wenn Sie weitere Stichproben benötigen, besuchen Sie: https://www.npmjs.com/package/react-router-redux