So, I was working on commerce.js API. But when I press add to cart, it takes a bit of time to update the cart items number (from API) so I thought I should add a loading button until the cart items load. I found LoadingButton from @mui/lab so I used it. but the problem is even though that button is inside the loop when pressing onClick all the other button also goes to the loading state. IDK am I missing something or is my coding false?. Please check below & help me. Thanks. :)
Here is the main problem.
Here is the app.js where you can see loading state & other API fetching
products component in app.js. you can see I passed down the products & loading props
products loop & props down to product component
finally the cart loading button in the product component with loading props. it works but all other buttons also loads at the same time.
What you can do is create a map in which you store the loading state for each cart. So cartLoading
will have the following shape:
{
"product-one-id": true,
"product-two-id": false,
}
So change the state to const [cartLoading, setCartLoading] = useState({});
At handleAddToCart
, change the two setCartLoading
calls so that they update only one key of the state:
setCartLoading(oldState => ({...oldState, [productId]: true}));
...
setCartLoading(oldState => ({...oldState, [productId]: false}));
Then, at the <Grid>
inside the Products
component, change cartLoading={cartLoading}
to cartLoading={cartLoading[product.id] || false}
This is just one way to do it though. You can also handle the state inside your Product
component.