Product list with cart using React+TS, Framer Motion, and Storybook
Design comparison
Solution retrospective
My biggest learning for this project would be using Storybook to design the components in isolation. It helped me put more thought into building components: when to make one, how to handle data fetching, etc. I also learned about the distinction between presentational and container components, which seems to be the favored design pattern for Storybook, and some tradeoffs that come with choosing such a pattern.
What specific areas of your project would you like help with?I'm having a weird error in StrictMode
: when removing an item from the cart, adding it immediately after would cause the same item to get added in the cart twice. This causes a warning that two children have the same key.
I spent some time debugging this issue but I can't seem to find the cause. Fortunately, this error doesn't show up in production, but any insights are most welcome!
Community feedback
- @markuslewinPosted 12 days ago
Hey!
The updater function of
set*
calls has to be pure, but the updater functions of theincrement
anddecrement
functions ofAddToCart
indirectly have side effects viacallback
, since the callback modifies the cart. I think the solution in this case is to call the callback outside of the updater:const increment = () => { const value = quantity + 1; setQuantity(value); if (callback) callback(value); };
Link to the docs: My initializer or updater function runs twice.
Marked as helpful1@joshjavierPosted 11 days ago@markuslewin You're right! Thanks for pointing me in the right direction. I've updated my code now and the console error is gone. Now I'll be extra careful to keep my updater functions pure. 😊
1 - @JudenetworkPosted 13 days ago
Great work project. Can you let users to sign up and sign in for the website so that during shipping there won't be confusion of goods.
Thanks.
0
Please log in to post a comment
Log in with GitHubJoin our Discord community
Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!
Join our Discord