Redux: Acción nunca vista cuando se envía a la Tienda.

Creado en 16 may. 2016  ·  3Comentarios  ·  Fuente: reduxjs/redux

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?

Comentario más útil

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.

Todos 3 comentarios

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones