REDUXIEREN
Sie können auch verwenden, react-router-reduxwas 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 historyObjekt. 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-reduxMiddleware-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 routerReducerganze 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 NavLinkTaste drückt . Wenn Sie diesen Weg gehen, werden Sie erfahren, dass die Verbindungsmethode von Redux verwendet shouldComponentUpdate. Mit routerReducerkönnen Sie mapStateToPropsRouting-Ä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, shouldComponentUpdateindem Sie die Verbindungsfunktion entfernen und prüfen, ob das Problem dadurch behoben wird. Wenn dies der Fall ist, ziehen Sie die routerReducerund 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
mapStateToPropsodermapDispatchToProps
- 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