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

347
Vistas
¿Se llama a la función regular de ReactContext causando un error pero no para la función de flecha?

Hola, soy bastante nuevo en React.

Aquí está mi código:

 const cartCtx=useContext(CartContext); const cartItems = ( <ul className={classes['cart-items']}> {cartCtx.items.map((item) => ( <CartItem key={item.id} name={item.name} amount={item.amount} price={item.price} onAdd={cartCtx.addItem(item)} ....

Estoy tratando de agregar un elemento llamando a la función Agregar que existía en mi ReactContext.

Sin embargo, me sale este error al ejecutar:

Advertencia: no se puede actualizar un componente ( CartProvider ) mientras se procesa un componente diferente ( Cart ). Para ubicar la llamada setState() incorrecta dentro de Cart .

Después de cambiar la llamada de función onAdd a una función de flecha:

 const cartItems = ( <ul className={classes['cart-items']}> {cartCtx.items.map((item) => ( <CartItem key={item.id} name={item.name} amount={item.amount} price={item.price} onAdd={()=>cartCtx.addItem(item)} ....

El problema se resuelve.

Aquí está mi función onAdd dentro de ReactContext:

 const defaultCartState = { items: [], totalAmount: 0 }; const cartReducer = (state, action) => { if (action.type === 'ADD') { const updatedTotalAmount = state.totalAmount + action.item.price * action.item.amount; const existingCartItemIndex=state.items.findIndex((item)=>item.id===action.item.id); const existingCartItem=state.items[existingCartItemIndex] let updatedItems; let updateItem; if (existingCartItem){ updateItem={...existingCartItem, amount:action.item.amount+existingCartItem.amount } updatedItems=[...state.items] updatedItems[existingCartItemIndex]=updateItem; } else{ updatedItems = state.items.concat(action.item);} return { items: updatedItems, totalAmount: updatedTotalAmount }; } return defaultCartState; }; const CartProvider = (props) => { const [cartState, dispatchCartAction] = useReducer(cartReducer, defaultCartState); const addItemToCartHandler = (item) => { dispatchCartAction({type: 'ADD', item: item}); }; const cartContext = { items: cartState.items, totalAmount: cartState.totalAmount, addItem: addItemToCartHandler }; return ( <CartContext.Provider value={cartContext}> {props.children} </CartContext.Provider> ); }; export default CartProvider;

¿Alguien sabe por qué sucede esto y cuál es la lógica detrás de la escena?

about 4 years ago · Juan Pablo Isaza
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