Redux: Действие никогда не просматривалось при отправке в Магазин.

Созданный на 16 мая 2016  ·  3Комментарии  ·  Источник: reduxjs/redux

У меня есть проект, отличный от React, со следующим кодом
.

_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

У меня проблема в том, что actions/page.js никогда не видит действие CREATE_PAGE . Есть мысли?

Самый полезный комментарий

Несвязанный, но

  • Это крайний случай, index.js загружает приложение, и мы подписываемся на
  • действие Redux @ @INIT вместо добавления еще одного уровня действий
  • что приводит к непредвиденным сценариям.

может сломать ваше приложение в любой день.

Мы специально говорим :

  • Это типы частных действий, зарезервированные Redux.
  • При любых неизвестных действиях необходимо вернуть текущее состояние.
  • Если текущее состояние не определено, вы должны вернуть исходное состояние.
  • Не ссылайтесь на эти типы действий непосредственно в своем коде.

Все 3 Комментарий

Несвязанный, но

  • Это крайний случай, index.js загружает приложение, и мы подписываемся на
  • действие Redux @ @INIT вместо добавления еще одного уровня действий
  • что приводит к непредвиденным сценариям.

может сломать ваше приложение в любой день.

Мы специально говорим :

  • Это типы частных действий, зарезервированные Redux.
  • При любых неизвестных действиях необходимо вернуть текущее состояние.
  • Если текущее состояние не определено, вы должны вернуть исходное состояние.
  • Не ссылайтесь на эти типы действий непосредственно в своем коде.

Спасибо @gaearon - я собираюсь удалить это, я добавил его, потому что созданные мной действия никогда не видны - Что я мог делать не так?

Пожалуйста, используйте StackOverflow для вопросов. Мы стараемся использовать средство отслеживания проблем для обсуждения ошибок и функций, но не для поддержки.

Что касается кода, он нарушает ограничения Redux, выполняя побочный эффект ( cart.init() ) и пытаясь отправить действие ( dispatch() ) внутри редуктора. Это не допускается, как неоднократно отмечалось в документации. Редукторы должны быть чистыми функциями, поэтому вам следует размещать побочные эффекты до или после отправки действия.

Если вы отправляете внутри редуктора, ваш код должен выйти из строя. Если это не сработает, возможно, у вас где-то есть Promise, проглатывающий ошибку. Из этого фрагмента кода сложно сказать больше.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

wmertens picture wmertens  ·  4Комментарии

captbaritone picture captbaritone  ·  3Комментарии

mickeyreiss-visor picture mickeyreiss-visor  ·  3Комментарии

parallelthought picture parallelthought  ·  3Комментарии

benoneal picture benoneal  ·  3Комментарии