Ich habe ein Nicht-React-Projekt mit dem folgenden Code
.
_index.js_
import configureStore from 'js/store/configureStore'
/* Redux Imports */
import { createPage } from 'js/actions/page'
// Boot the App
document.addEventListener('DOMContentLoaded', function () {
const initialState = window.__INITIAL_STATE__
const pageId = window.__INITIAL_STATE__.page
const store = configureStore(initialState)
store.dispatch(createPage(pageId))
})
*actions/page.js*
function initPage (pageId) {
return {
type: 'CREATE_PAGE',
page: pageId
}
}
export function createPage (pageId) {
return dispatch => {
dispatch(initPage(pageId))
}
}
_reduzierer/page.js_
/**
* Page Mediators get imported here
* Page Mediators are brokers that hold page initialization.
* The bundle includes all page mediators but they will not be activated
* unless thre reducer calls them.
*/
import * as cart from 'js/templates/cart'
/**
* This is a edge case, index.js boots the app and we are subscribing to
* a Redux @<strong i="11">@INIT</strong> action instead of adding one more layer of actions
* which leads to unintended scenarios.
*/
const page = (state = {page: []} , action) => {
console.log(state)
switch (action.type) {
case '@<strong i="12">@INIT</strong>':
console.log('initializing page:' + state.id)
console.log(state)
dispatch({type: 'CREATE_PAGE',page: state.id})
cart.init()
return state
case 'CREATE_PAGE':
console.log('initializing page:' + state.id)
cart.init()
return state
default:
return state
}
}
export default page
Das Problem, das ich habe, ist, dass actions/page.js
die Aktion CREATE_PAGE
nie sieht. Irgendwelche Gedanken?
Nicht verwandt, aber
- Dies ist ein Randfall, index.js bootet die App und wir abonnieren
- eine Redux @ @ INIT- Aktion, anstatt eine weitere Aktionsebene hinzuzufügen
- was zu ungewollten Szenarien führt.
kann Ihre App jeden Tag kaputt machen.
Wir sagen konkret :
- Dies sind private Aktionstypen, die von Redux reserviert sind.
- Für alle unbekannten Aktionen müssen Sie den aktuellen Status zurückgeben.
- Wenn der aktuelle Status nicht definiert ist, müssen Sie den Anfangsstatus zurückgeben.
- Verweisen Sie in Ihrem Code nicht direkt auf diese Aktionstypen.
Danke @gaearon - Ich beabsichtige, dies zu entfernen, ich habe es hinzugefügt, weil die von mir erstellten Aktionen nie
Bitte verwenden Sie StackOverflow für Fragen. Wir versuchen, den Issue Tracker für Fehler- und Feature-Diskussionen zu verwenden, jedoch nicht für Support.
Der Code verstößt gegen die Einschränkungen von Redux, indem er einen Nebeneffekt ( cart.init()
) ausführt und versucht, eine Aktion ( dispatch()
) innerhalb des Reducers auszuführen. Dies ist nicht erlaubt, wie in der Dokumentation mehrfach vermerkt. Reduzierer müssen reine Funktionen sein, daher sollten Sie Nebenwirkungen vor oder nach dem Versand der Aktion platzieren.
Wenn Sie in einem Reduzierstück versenden, sollte Ihr Code fehlschlagen. Wenn es nicht fehlschlägt, haben Sie vielleicht ein Versprechen, das den Fehler irgendwo verschluckt. Es ist schwer, mehr aus diesem Codeschnipsel zu sagen.
Hilfreichster Kommentar
Nicht verwandt, aber
kann Ihre App jeden Tag kaputt machen.
Wir sagen konkret :