Ich bin neu in Redux-Architektur, ich habe diese grundlegenden Zweifel können wir aktualisieren die Reducer-Liste nach dem Erstellen des Speichers mit combinedReducer und createStore-Methoden?update redux reducers nach store initialization
Antwort
Ja, Sie können die Reduzierungen aktualisieren und eine neue asynchron mit replaceReducer
api von Redux store
injizieren.
Es ist eine erweiterte API. Möglicherweise benötigen Sie dies, wenn Ihre Anwendung den Code splitting implementiert und Sie einige der Reduzierungen dynamisch laden möchten. Sie benötigen möglicherweise auch, wenn Sie einen Hot-Reload-Mechanismus für Redux implementieren.
Nehmen wir als Beispiel das starter-kit
In createStore.js file die reducers
als Argumente an die Methode übergeben createStore
sind das Ergebnis von makeRootReducers()
. Achten Sie darauf, dass für diese Funktion kein Async-Reduzierer vorhanden ist.
// extract of src/store/createStore.js
import { applyMiddleware, compose, createStore } from 'redux'
import { routerMiddleware } from 'react-router-redux'
import thunk from 'redux-thunk'
import makeRootReducer from './reducers'
export default (initialState = {}, history) => {
// ...
// ======================================================
// Store Instantiation and HMR Setup
// ======================================================
const store = createStore(
makeRootReducer(), // <------------- without arguments, it returns only the synchronously reducers
initialState,
compose(
applyMiddleware(...middleware),
...enhancers
)
)
store.asyncReducers = {}
// ...
}
In reducers.js file:
makeRootReducer
Funktion aufruftcombineReducers
mit den Standard-Reduzierer für die Inbetriebnahme benötigt (wierouter
Minderer) und andere "asynchron" als Argumente übergeben ReduzierungeninjectReducer
ist eine Funktion aufgerufen, neue Reducer zur Laufzeit zu injizieren. Es ruftreplaceReducer
api auf dem Speicher als Argument erhalten durchmakeRootReducer(async)
Funktion
siehe unten eine neue Liste von Reduzierungen vorbei:
// src/store/reducers.js
import { combineReducers } from 'redux'
import { routerReducer as router } from 'react-router-redux'
export const makeRootReducer = (asyncReducers) => {
return combineReducers({
// Add sync reducers here
router,
...asyncReducers
})
}
export const injectReducer = (store, { key, reducer }) => {
store.asyncReducers[key] = reducer
store.replaceReducer(makeRootReducer(store.asyncReducers))
}
export default makeRootReducer
schließlich im Starter-Kit der Minderer auf Routendefinition eingespritzt wird, hier wie:
// src/routes/Counter/index.js
import { injectReducer } from '../../store/reducers'
export default (store) => ({
path: 'counter',
/* Async getComponent is only invoked when route matches */
getComponent (nextState, cb) {
/* Webpack - use 'require.ensure' to create a split point
and embed an async module loader (jsonp) when bundling */
require.ensure([], (require) => {
/* Webpack - use require callback to define
dependencies for bundling */
const Counter = require('./containers/CounterContainer').default
const reducer = require('./modules/counter').default
/* ----> HERE <---- */
/* Add the reducer to the store on key 'counter' */
injectReducer(store, { key: 'counter', reducer }) // <-------
/* Return getComponent */
cb(null, Counter)
/* Webpack named bundle */
}, 'counter')
}
Diese Technik ist hilfreich, wenn Sie eine große App teilen mögen und vermeiden Sie alle Reduzierungen an dem Boot zu laden.
- 1. Verbessern redux reducers
- 2. Redux - Store funktioniert nicht
- 3. Redux Setup | ReagierenJS | ES6
- 4. Wie erstellt man einen Store pro Instanz in Redux?
- 5. Reagieren Redux unerwartete Schlüsselspeicher
- 6. Mapper, Reducers, FIlters
- 7. Initialization gezackte Arrays
- 8. Validieren von Daten in Redux Store
- 9. React Router Redux unveränderbar
- 10. Redux mapStateToProps: Dispatch Aktion schließen Popup nach async Update
- 11. Konfigurieren ein redux Speicher mit redux devtools (der Chrome-Erweiterung)
- 12. Redux-Shop hat keinen gültigen Reducer
- 13. Verwenden Sie Redux in einer isomorphen App
- 14. Redux Zustand wird nach Aufruf verschachtelt eine Aktion
- 15. Windows Store App UI Update
- 16. Java Static Initialization Reihenfolge
- 17. typescript interface initialization
- 18. Sollte ich den Redux-Store nach der Domain oder nach den App-Views strukturieren?
- 19. React/Redux Redux-Formular vor dem Ausfüllen Formular für Update
- 20. Store browserHistory mit history.js in react redux Architektur mit SSR
- 21. Implementierung React Redux
- 22. React-redux store updates, aber React does not
- 23. Sind API-Tokens in einem Flux (Redux) Store sicher?
- 24. Lifetime Bereiche mit Lazy Initialization?
- 25. Abmelden von Redux Store, wenn die Bedingung erfüllt ist?
- 26. React Redux async Aktionstest
- 27. Wie Statusdaten nach dem asynchronen Aktionsversand mit Redux abgerufen werden?
- 28. Redux: update nur ein Element in einer verschachtelten Liste
- 29. Store hat keinen gültigen Reducer mit combineReducer
- 30. Wie funktioniert das Play Store-Apps-Update?
Danke für die Lösung, es hat das Problem behoben. –
@Sibeshkumar froh, dass es dir hilft! – NickGnd