'dom is not updated after state change via Context API

I am quite new to React and tried to finish a project on FrontendMentor. It's basically a simple OPA of an online store with just one product and the ability to add this product to a cart.

I thought it would be a good idea to learn about Reacts Context API so that I get a basic understanding.

The first context that I created basically looks like this:

import { createContext, useContext, useState } from "react";

export const CartContext = createContext();

export const CartProvider = ({ children }) => {
  const cartValue = useCartProvider();
  return (
    <CartContext.Provider value={cartValue}>{children}</CartContext.Provider>
  );
};

export const useCart = () => {
  return useContext(CartContext);
};

export const useCartProvider = () => {
  const initialValue = [{name: name, price: price, amount: amount}];
  const [cartAmount, setCartAmount] = useState(initialValue);

  const addToCart = (name, price, amount) => {
    setCartAmount([
      ...cartAmount,
      { name: name, price: price, amount: amount },
    ]);
  };
  return {
    cartAmount,
    setCartAmount,
    addToCart,
  };
};

When I add something to the Cart, I want to display the current amount of products in the cart with a little number above the cart. I implemented everything to the point that I see the number and can access the state variable cartAmount in the Navbar component.

Unfortunately it does not update. When I add to the cart I can console.log the event but the badge above the cart is not being updated.

Also - the update does not happen in real time.

I've read about Reacts ability to badge state updates for performance reasons and I also read about using useReducer hook for the actions.

With my current knowledge I feel like I cannot make the connection between all of these elements, yet.

Would like your help on that - please let me know if you need more information than provided.

Thanks in advance.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source