Redux: Action jamais vue lors de l'envoi sur Store.

Créé le 16 mai 2016  ·  3Commentaires  ·  Source: reduxjs/redux

J'ai un projet non React avec le code suivant
.

_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))
  }
}

_réducteurs/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

Le problème que j'ai est que actions/page.js ne voit jamais l'action CREATE_PAGE . Des pensées?

Commentaire le plus utile

Sans rapport mais

  • Ceci est un cas limite, index.js démarre l'application et nous nous abonnons à
  • une action Redux @ @INIT au lieu d'ajouter une couche d'actions supplémentaire
  • ce qui conduit à des scénarios inattendus.

peut casser votre application n'importe quel jour.

Nous disons précisément :

  • Ce sont des types d'action
  • Pour toute action inconnue, vous devez retourner l'état actuel.
  • Si l'état actuel n'est pas défini, vous devez retourner l'état initial.
  • Ne référencez pas ces types d'action directement dans votre code.

Tous les 3 commentaires

Sans rapport mais

  • Ceci est un cas limite, index.js démarre l'application et nous nous abonnons à
  • une action Redux @ @INIT au lieu d'ajouter une couche d'actions supplémentaire
  • ce qui conduit à des scénarios inattendus.

peut casser votre application n'importe quel jour.

Nous disons précisément :

  • Ce sont des types d'action
  • Pour toute action inconnue, vous devez retourner l'état actuel.
  • Si l'état actuel n'est pas défini, vous devez retourner l'état initial.
  • Ne référencez pas ces types d'action directement dans votre code.

Merci @gaearon - J'ai l'intention de supprimer cela, je l'ai ajouté car les actions que j'ai créées ne sont jamais vues - Qu'est-ce que je pourrais faire de mal ?

Veuillez utiliser StackOverflow pour les questions. Nous essayons d'utiliser l'outil de suivi des problèmes pour les discussions sur les bogues et les fonctionnalités, mais pas pour l'assistance.

Quant au code, il viole les contraintes de Redux en effectuant un effet secondaire ( cart.init() ) et en essayant d'envoyer une action ( dispatch() ) à l'intérieur du réducteur. Ceci n'est pas autorisé, comme indiqué plus d'une fois dans la documentation. Les réducteurs doivent être des fonctions pures, vous devez donc placer les effets secondaires avant ou après l'envoi de l'action.

Si vous expédiez à l'intérieur d'un réducteur, votre code devrait échouer. Si cela n'échoue pas, peut-être avez-vous une promesse qui avale l'erreur quelque part. Il est difficile d'en dire plus à partir de cet extrait de code.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

mickeyreiss-visor picture mickeyreiss-visor  ·  3Commentaires

timdorr picture timdorr  ·  3Commentaires

dmitry-zaets picture dmitry-zaets  ·  3Commentaires

wmertens picture wmertens  ·  4Commentaires

vslinko picture vslinko  ·  3Commentaires