Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

332
Vistas
Redux preloadedState que causa la anulación (y el posterior error indefinido) del estado reductor predeterminado?

Actualmente estoy creando un sitio web con react-redux y recibí un error tipográfico en la variable preloadedState dentro de createStore. Mi código de tienda relevante es el siguiente (Observe la ortografía de cartitems en initialState en lugar de cartItems ):

 const reducer = combineReducers({ productList: productListReducer, productDetails: productDetailsReducer, cart: cartReducer, }) const cartItemsFromStorage = localStorage.getItem('cartItems') ? JSON.parse(localStorage.getItem('cartItems')) : [] //BELOW GETS PASSED INTO createStore const initialState = { cart: {cartitems: cartItemsFromStorage} }

Dentro de my cartReducer , el código afectado es el siguiente:

 export const cartReducer = (state = {cartItems: []}, action) => { switch(action.type){ case CART_ADD_ITEM: const item = action.payload const existItem = state.cartItems.find(x => x.product === item.product) ***other code below...*** default: return state }

Noté que esto arroja un Unhandled Rejection (TypeError): state.cartItems is undefined en la línea existItem . ¿Por qué la adición de preloadedState causa este problema? Según tengo entendido, el estado predeterminado del reductor (en este caso dado por state = {cartItems: []} ) ¿debería seguir siendo accesible desde dentro del reductor? ¿No es este el caso?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Esto es por diseño. Del documento Estado de inicialización :

Sin combineReducers() o un código manual similar, preloadedState siempre gana a state = ... en el reductor porque el estado pasado al reductor es preloadedState y no está undefined , por lo que la sintaxis del argumento ES6 no se aplica.

Con combineReducers() el comportamiento es más matizado. Aquellos reductores cuyo estado se especifique en preloadedState recibirán ese estado. Otros reductores recibirán undefined y, por eso, volverán al argumento state = ... predeterminado que especifiquen.

Para su caso, el preloadedState es {cart: { cartitems: cartItemsFromStorage }} , el { cartitems: cartItemsFromStorage } se pasará en cartReducer como su estado predeterminado en lugar de la sintaxis de argumento predeterminada de ES6 .

Es por eso que la forma del estado de su carrito es {cartitems: cartItemsFromStorage}

Si preloadedState no está undefined , entonces el estado predeterminado de su carrito es {cartItems: []} .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda