Tengo un proyecto que no es React con el siguiente código
.
_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))
}
}
_reducers / 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
El problema que tengo es que actions/page.js
nunca ve la acción CREATE_PAGE
. ¿Alguna idea?
No relacionado pero
- Este es un caso de borde, index.js inicia la aplicación y nos estamos suscribiendo a
- una acción Redux @ @INIT en lugar de agregar una capa más de acciones
- lo que conduce a escenarios no deseados.
puede romper tu aplicación cualquier día.
Decimos específicamente :
- Estos son tipos de acciones privadas reservados por Redux.
- Para cualquier acción desconocida, debe devolver el estado actual.
- Si el estado actual no está definido, debe devolver el estado inicial.
- No haga referencia a estos tipos de acción directamente en su código.
Gracias @gaearon - Tengo la intención de eliminar esto, lo agregué porque las acciones que he creado nunca se ven - ¿Qué podría estar haciendo mal?
Utilice StackOverflow para preguntas. Intentamos usar el rastreador de problemas para discutir errores y funciones, pero no para brindar soporte.
En cuanto al código, viola las restricciones de Redux al realizar un efecto secundario ( cart.init()
) e intentar enviar una acción ( dispatch()
) dentro del reductor. Esto no está permitido, como se indica más de una vez en la documentación. Los reductores deben ser funciones puras, por lo que debe colocar los efectos secundarios antes o después de enviar la acción.
Si envía dentro de un reductor, su código debería fallar. Si no falla, tal vez tenga una Promesa que se traga el error en alguna parte. Es difícil decir más de este fragmento de código.
Comentario más útil
No relacionado pero
puede romper tu aplicación cualquier día.
Decimos específicamente :