React Shopping Cart Tutorial | Context API with useReducer Hook in React JS

Поделиться
HTML-код
  • Опубликовано: 15 июл 2024
  • #reactshoppingcart #useContext#ReactJSProject #useReducer
    Build a Shopping Cart Project in React JS in one video. We will use Context API with useReducer Hook for State Management. Learn Hooks like createContext and useContext. We will learn add to cart functionality along with sorting and filtering products by search also.
    Source Code -
    github.com/piyush-eon/React-s...
    Live Site -
    shopping-cart-with-reactjs.ne...
    If any questions, ask here -
    / roadsidecoder
    Context API Tutorial -
    • React Context API with...
    React Router Tutorial -
    • React Router Dom [ Ful...
    00:00:00 Intro
    00:00:24 Project Overview
    00:02:53 Initialize new React App
    00:03:23 Setup React Bootstrap
    00:05:29 Header Component
    00:12:05 Creating Page Routes
    00:14:43 Setup Context API
    00:17:10 Generating Products JSON
    00:20:09 useReducer Hook
    00:23:43 useContext Hook
    00:24:19 Home Page UI
    00:28:13 Filter Component UI
    00:30:55 Rating Component UI
    00:35:27 SingleProduct Component UI
    00:40:04 Add / Remove from Cart Functionality
    00:45:20 Header Cart Dropdown
    00:50:21 Cart Page
    01:00:00 Change Cart Quantity Functionality
    01:01:53 Filters Implementation
    01:02:18 Filters useReducer
    01:12:22 Transform Products Logic
    01:16:44 Mobile Responsive Styles
    01:17:56 Outro
    Movie App in React JS and Material UI -
    • Movies and TV Series S...
    Quiz App in React JS and Material UI -
    • Quiz App in React JS w...
    Dictionary App in React JS and Material UI -
    • 12 Language Dictionary...
    Learn React From Scratch -
    • React JS Workshop Day ...

Комментарии • 439

  • @RoadsideCoder
    @RoadsideCoder  2 месяца назад

    My Complete Frontend Interview Prep Course - roadsidecoder.com/course-details (50% Discount for limited time)

  • @rajat4002
    @rajat4002 3 года назад +165

    Whoever is watching this video, let me tell you one thing. You'll be asked to make such project in your frontend interview. Make the most use of this video. Thank you for putting such an amazing content on RUclips bhai 😍❤️

    • @RoadsideCoder
      @RoadsideCoder  3 года назад +11

      Yes, It'll be very helpful in machine coding round.

    • @Sky-yy
      @Sky-yy 3 года назад +4

      Thank you for your comment to let others know the importance of this video bro

    • @sudhanshumishra935
      @sudhanshumishra935 2 года назад +8

      Yes, i got an assignment which was exactly similar to this 3 days ago, but sadly i coudln't implement the filter functionality......anyways now i have learnt about state management through this video

    • @shujathaliirfan2662
      @shujathaliirfan2662 2 года назад

      I agree

    • @ssumit196
      @ssumit196 2 года назад +1

      thanks buddy, I was just wondering about this.

  • @vamsikrishna7957
    @vamsikrishna7957 2 года назад +19

    Great tutorial!!If anyone is getting a blue background in Navbar dropdown badge,set {10}..the background color gets removed.

  • @purangurung4559
    @purangurung4559 2 года назад +33

    for route we can use

    • @davidbaraiya2649
      @davidbaraiya2649 Год назад +1

      Yes this is v6

    • @sumittimori834
      @sumittimori834 Год назад +2

      You could've told for FAKERJS alternative faker doesn't work anymore or is it

    • @chetandhadd321
      @chetandhadd321 Год назад

      @@sumittimori834 they bro...im getting error The above error occurred in the component any help

    • @AmitGhosh-lj3oc
      @AmitGhosh-lj3oc Год назад

      @@sumittimori834 did you find any alternative?

    • @PeterMehr
      @PeterMehr 11 месяцев назад

      @@AmitGhosh-lj3oc You can use @faker-js/faker instead:
      --> install it with:
      npm install @faker-js/faker
      --> then import it in Context.js:
      import { faker } from '@faker-js/faker';
      --> and then use it in Context.js:
      const products = [...Array(20)].map(() => ({
      id: faker.string.uuid(),
      name: faker.commerce.productName(),
      price: faker.commerce.price(),
      image: faker.image.url(),
      inStock: faker.helpers.arrayElement([0, 3, 5, 6, 7]),
      fastDelivery: faker.datatype.boolean(),
      ratings: faker.helpers.arrayElement([1, 2, 3, 4, 5]),
      }));

  • @debasmitamallick6489
    @debasmitamallick6489 Год назад +1

    This project is just awesome! I learned a lot from this video. Thanks a ton❤

  • @BrijeshSingh-dp1ku
    @BrijeshSingh-dp1ku 2 года назад +7

    Please keep making such tutorials these are really great 👏

  • @Dhivyathaya
    @Dhivyathaya Год назад

    Thank you for uploading it, Piyush. It's really helpful for us to understand the concept. I can see the hard work and effort you put into it. Once again thank you.

  • @jugalsuthar9751
    @jugalsuthar9751 3 года назад +4

    such a great session I learn so many things from this video...thanks and make more videos like this..

  • @AshishGupta-be2yz
    @AshishGupta-be2yz Год назад

    Very amazing project with indepth explanation. Learned many of new things related to reducer. Thanks a lot bhai.

  • @Hrit
    @Hrit Год назад

    This is actually a very clean way to write a shopping cart. Thanks for the video man!

    • @user-bk3hp4zw4l
      @user-bk3hp4zw4l Год назад

      Bro can you forward the link of your shopping cart code bro

  • @anonimato1987
    @anonimato1987 Год назад

    I am so greatful for the "!important" trick. This is the first time I'm seeing this. So useful!!! Thank you so much!

  • @elad3958
    @elad3958 2 года назад +1

    Thank you brother, I became an instant fan of your work/channel.

  • @oncoding4520
    @oncoding4520 11 месяцев назад

    Have been seen some of your videos and you are really a great teacher. Please keep doing some more content for us :)

  • @Admin-up4hh
    @Admin-up4hh Год назад +1

    Very underated Video . This is what I wanted... Thanks ..💯

  • @ndahayokevin7626
    @ndahayokevin7626 2 года назад

    Incredible I love your tutorials, you are on of the best Tech youtubers I like most

  • @BrijeshSingh-dp1ku
    @BrijeshSingh-dp1ku 2 года назад

    Best resource for React 🔥🙌

  • @mishka.g8462
    @mishka.g8462 Год назад

    That's really great!! keep going!!!🤩

  • @parvathyvd
    @parvathyvd Год назад

    Thank you so much for making such a wonderful project.

  • @alextalha_
    @alextalha_ 2 года назад +1

    the best video by contextApi

  • @2784raj
    @2784raj Год назад

    you are awesome mentor, well done mate!

  • @mohitsaud2071
    @mohitsaud2071 2 года назад +2

    Thank you for this wonderful tutorial.

  • @niranjanjathar3748
    @niranjanjathar3748 2 года назад

    Thanks for such a great video on context api

  • @IvinAustan
    @IvinAustan Год назад

    Thanks a lot, such an great video with nice explanation. 👍

  • @sk199
    @sk199 Год назад

    your projects are super helpful brother..⭐❤

  • @noobCoder26
    @noobCoder26 2 года назад +1

    I am learning a lot from this channel man .I dont understand why this channel is so underrated

    • @RoadsideCoder
      @RoadsideCoder  2 года назад +1

      You can change that by sharing it to more people 😁🙏

    • @noobCoder26
      @noobCoder26 2 года назад

      @@RoadsideCoder I am doing that for sure

  • @sohadmad1823
    @sohadmad1823 Год назад +7

    I can't express how much I am grateful to you, you really saved my life! Thank you very much, you are the best instructor I've learnt with him!

  • @chiranjeevichowdary5948
    @chiranjeevichowdary5948 3 года назад

    Waited for this a long time

  • @abubakaryasin8610
    @abubakaryasin8610 3 года назад +2

    I learned a lot from you
    Great content

  • @user-vu9dl3vn7l
    @user-vu9dl3vn7l Месяц назад

    It's a great video! Thanks a lot!

  • @shamaunnabi3508
    @shamaunnabi3508 2 года назад +1

    You are Just Amazing ....We need More Tutorial Like This....Please Upload More Beginner Projects

  • @MrAndykofi
    @MrAndykofi 2 года назад

    Great job, thanks for sharing

  • @mma-dost
    @mma-dost 2 года назад +1

    Thank you Bhaiya for this tutorial. Really great video 🔥🙏👌❤️👍👍

  • @tirielross
    @tirielross Год назад

    Thank you very much professor for this amazing project, this opens and expands my knowledge to know more about Reducer, provider state, etc.

  • @vaibhavjadhav1702
    @vaibhavjadhav1702 10 месяцев назад

    thank you for this amazing project🙂

  • @bardhan.abhirup
    @bardhan.abhirup Год назад +2

    Hey, firstly, thanks a lot for your tutorials and interviews. I genuinely feel like I've learnt a lot through them Having said that, if you don't mind a bit of feedback, your naming conventions and general consistency needs some attention. I feel it's all over the place. I know during the interview demos you tend to code faster but in these expositions when you have the luxury of time, i think it's worth paying attention to since you have a lot of viewers. Just my opinion. Regardless of that, I highly appreciate the effort you put in to your content. Thanks once again!

    • @RoadsideCoder
      @RoadsideCoder  Год назад +2

      Hey, Thanks a lot for your feedback. And I have improved this in my recent videos after realising this. ❤️

  • @jenso413
    @jenso413 Год назад +8

    For anyone else curious about the Array(prod.inStock).keys(); evidently keys() is also an array method! I thought it was just an object method. What he is doing here is creating an array the length of the number of products in stock. For example, if there was 5 products in stock, there would be an array with 5 elements (all undefined initially). Then, the keys method converts an array to an iterable object with the array keys(indexes). This is then spread into an array and mapped over, essentially making each array element an index.
    I think a simpler and more understandable solution would simply be to use the index parameter from the map function, the result seems to be the same.

  • @alanouri9965
    @alanouri9965 Год назад

    Thank you man!

  • @abdulrakib9906
    @abdulrakib9906 3 года назад

    Really great video. I am looking something like that. Thank you very much..

  • @krutidewda3152
    @krutidewda3152 4 месяца назад

    very useful video. Thankyou so much for this.

    • @RoadsideCoder
      @RoadsideCoder  4 месяца назад

      Thanks! I have created an indepth course covering all such topics - roadsidecoder.com/course-details

  • @baridzimaximillem6743
    @baridzimaximillem6743 2 года назад

    You are amazing man keep it up

  • @l.seciltuncay7921
    @l.seciltuncay7921 Год назад

    great tutorial ⭐⭐⭐⭐⭐ thanks

  • @Ravikumar-wv2xq
    @Ravikumar-wv2xq Год назад +2

    hello sir great tutorial perfect combination of useReducer and contextAPI. it's working same as like as redux.

    • @vinayakjaimini7716
      @vinayakjaimini7716 6 месяцев назад

      hiii bro i am facing problem in running this project can u help

  • @iqbal5942
    @iqbal5942 3 года назад +1

    you deserve more subscribers and likes 💖

    • @RoadsideCoder
      @RoadsideCoder  3 года назад +1

      Thanks man. You can support me by sharing this to people who need it.

  • @tanjimanim2391
    @tanjimanim2391 Год назад +10

    This is a great tutorial. I used this in my project and I want to point out two things.
    1. the store/global state will be gone once the page refreshes. Use localstorage to store that.
    2. The reducer function used in this video are not pure functions, as you are assigning values on reducers, which is not a good practice.

    • @oussamaaitboulahna4849
      @oussamaaitboulahna4849 Год назад +1

      Hi brother , can u tell me how did u store ur data into localstorage and fetch it again , cuz for me im only get [object,object] ??

    • @tanjimanim2391
      @tanjimanim2391 Год назад +1

      @@oussamaaitboulahna4849 share your code brother

    • @shariqansari4056
      @shariqansari4056 Год назад +2

      @@oussamaaitboulahna4849 Convert your data into string , then store in local storage.

    • @oussamaaitboulahna4849
      @oussamaaitboulahna4849 Год назад

      @@shariqansari4056 Oh Thanks Man

    • @abbaskagdi1
      @abbaskagdi1 Год назад +3

      This comment needs to be on top

  • @souleymanecisse8644
    @souleymanecisse8644 2 года назад

    Great content , thanks for sharing

  • @garima6571
    @garima6571 Год назад

    Great man

  • @parmaryash4406
    @parmaryash4406 2 года назад +1

    Amazing

  • @meidadb5992
    @meidadb5992 Год назад

    Thank you❤️

  • @namethse01
    @namethse01 Год назад

    thanks bro, though manything outdate and alot update after time, but it still a good tutorial to start and easy to understand

  • @korndev6862
    @korndev6862 2 года назад +1

    Great Tutorial. i would like the react + typescript + combine reducers tutorial plz.

  • @navinkumarsahu1159
    @navinkumarsahu1159 11 месяцев назад

    Please bring more such contents

  • @miansaqlain8360
    @miansaqlain8360 Год назад

    Thank you Sir

  • @user-pb5dy5th3z
    @user-pb5dy5th3z 2 года назад +4

    Thank you for your kind explanation! btw I wonder if there is a way to lose focus on the green cart button at "50:15" when moving to the cart page. I tried document.activeElement.blur() but it doesn't work. Probably it's hard to control the bootstrap component?

  • @akashawasthi9515
    @akashawasthi9515 2 года назад

    utub recommending this piece of work

  • @chafikgouasmia8089
    @chafikgouasmia8089 2 года назад

    Thanks dear oracle : )

  • @NCS8331
    @NCS8331 6 месяцев назад

    thank you

  • @azizulhakim1534
    @azizulhakim1534 2 года назад +1

    amazing content brother.
    You deserve more subs,
    One request: if possible please use a loud microphone.

    • @RoadsideCoder
      @RoadsideCoder  2 года назад

      Thanks brother, I'll improve the audio quality 🤘

  • @huyenminh2631
    @huyenminh2631 2 года назад

    From VietNam thanks you so much

  • @saichaitanyaemandi6386
    @saichaitanyaemandi6386 Год назад

    bro thanks a lot

  • @saurabhtiwari-kg9vn
    @saurabhtiwari-kg9vn Год назад

    Bhai kya khate ho 🤔 itna energy rahta hai 😄
    Bhokal video h 🔥🔥

  • @vaibhavsharma8012
    @vaibhavsharma8012 6 месяцев назад

    Good Project

  • @phuquang8558
    @phuquang8558 2 года назад

    very good

  • @sushilkumar-ef7gh
    @sushilkumar-ef7gh Год назад

    Only when components need lot of different state than , its recommended to use state hook else switch on reducer or redux

  • @shujathaliirfan2662
    @shujathaliirfan2662 3 года назад +1

    superrrr bro

  • @emonislam1660
    @emonislam1660 2 года назад

    Great

  • @sushmitagupta
    @sushmitagupta 2 года назад +7

    Great tutorial! It helps me a lot while adding some feature in my E-commerce project but I'm using my own database and I have not added the "inStock" in my database so can you please tell me how can I add that and use in the qty increment feature of cart cards.

  • @mprasanth18
    @mprasanth18 Год назад +2

    In interviews is it okay to use plain css modules instead of bootstrap?

  • @kuldeepsingh-wd7pe
    @kuldeepsingh-wd7pe Год назад

    great

  • @lle5159
    @lle5159 2 года назад +6

    This is too awesome, I've learned a ton by this video. Thank you very much!
    Just a little question: `alignRight` in is not working in my end. Has anyone caught the same thing?

    • @kelongFX
      @kelongFX 2 года назад +1

      yes it says something about the dom i didnt quite get it

    • @lle5159
      @lle5159 2 года назад

      @@kelongFX I use CSS to align the dropdown menu, that I set position: relative for container and position: absolute for dropdown-menu

    • @cat_onthe_
      @cat_onthe_ 2 года назад +6

      Remove 'alignRight'
      and add
      Worked for me.

    • @andress9525
      @andress9525 2 года назад

      You can add inline styling to the tag like so: style={{ alignRight: true }}

    • @nobodyneedstoknow128
      @nobodyneedstoknow128 Год назад

      align={'end'}

  • @islamel7adidy898
    @islamel7adidy898 Год назад

    بتتكلم اسرع من حياتي م براحه ي غالي

  • @priyankashingne8143
    @priyankashingne8143 Год назад

    This is really helpful video i m trying to create a same project but i m getting problem to access faker

  • @devsingal8373
    @devsingal8373 2 года назад

    thank you bhaiya so much this hepls a ton, i was stuck in my cart app but this helped me get a new perspective
    thank you so much
    can you also make full working ecommerce website video plzzzzzzzzzzzzzzzzzzzzzzzzzzzz

  • @iqbal5942
    @iqbal5942 3 года назад +1

    Amazing video bro ❤️🙌

  • @Insane.18_7
    @Insane.18_7 8 месяцев назад

    Hi bro thank you so much. You helped me a lot by sharing this content ❤. Can I know one thing, is this responsive, I mean is this compatible for smaller devices like mobile applications?

  • @nikolozmacharashvili1212
    @nikolozmacharashvili1212 Год назад +1

    complicated video, took a while for me to understand the useState hook, but a good job overall...

  • @GauravPatel-kh1sq
    @GauravPatel-kh1sq 2 года назад +1

    Very Nice explanation with real project. thank you. Can you create/share video with Backend API calling like realword application?

    • @RoadsideCoder
      @RoadsideCoder  2 года назад +1

      I already have a mern stack tutorial series. You can check it out!

  • @MrPeepa
    @MrPeepa 2 года назад +1

    "A is only ever to be used as the child of element, never rendered directly. Please wrap your in a "
    what to do if i get this error?? because if i wrap with it says [home] is not a react component or react.fragment

  • @sahanan7117
    @sahanan7117 2 года назад +1

    Hi..
    In creating page router, I have written same code as yours but their is error in my output... Please help me out

  • @alphonsesossou4283
    @alphonsesossou4283 Год назад

    Thanks so much for this awesome course. I am making an excellent use of it. Only one minore issue. Children props is flagged with the error message "Children is missing in props validation". I am using react app created through latest vite. Any hint on what to add to the app so that error disappears? I should mention that the context provider function in jsx nor js.

  • @blah9960
    @blah9960 2 года назад +1

    Hey thanks for awesome tutorials. Please make a video on redux persist and how user are not able to see persist local storage data in production level

    • @RoadsideCoder
      @RoadsideCoder  2 года назад

      Hey, Have you followed my MERN Stack Tutorial with redux?

    • @blah9960
      @blah9960 2 года назад

      @@RoadsideCoder yes i followed but there is no redux persist implementation

    • @RoadsideCoder
      @RoadsideCoder  2 года назад

      @@blah9960 I have done it, in our store.js when the app loads, it takes user from localstorage

  • @TajminurRahmanmeshadowscream
    @TajminurRahmanmeshadowscream 2 года назад +2

    Great tutorial. So much helpful. I have a question though. How to initialize state with products from API call? Because you're loading dummy products which are synchronised call. How about an async call using API? I tried but the initial state in useReducer initialized first before the products from API get loaded. What do you think?

    • @RoadsideCoder
      @RoadsideCoder  2 года назад +1

      You can do it the same way, that dummy data is also the result of an api call from faker

  • @meitoli
    @meitoli Год назад

    in case you have a problem when you click the add to cart and the remove from cart and all items selected. There is an error in the case ADD TO CART, thanks to CHATOpenAI, the code: case 'ADD_TO_CART':
    return {...state, cart:[...state.cart, {_id: action.payload.id, ...action.payload, qty: 1}]};

  • @purusharma8192
    @purusharma8192 Год назад

    Please make more react projects....thanks a lot
    btw are you in akshay saini discord voice chat on first day😁

  • @manojsuggala4666
    @manojsuggala4666 Год назад +1

    Good video with clear Explanation.
    I tried implementing this project, But I didn’t get the output. I got an error saying that:
    Module not found ‘Faker’ can’t resolve in src/context/context.js.
    Even I install the package by npm install faker, the error is not re-solving.
    Can any one help me in resolving the error
    Thanks in Advance.

  • @anhduc97hn
    @anhduc97hn Год назад

    can someone explain the `onClick` props in rating component for me please? why they're so different in `filter` and `rating` components? thanks!

  • @simranmundada
    @simranmundada 2 года назад +1

    I am getting module not found error which says can't resolve faker in my project

  • @nishantbindhani9434
    @nishantbindhani9434 10 месяцев назад

    how is ur dropdown menu position like this (end of dropdown menu container is aligned with the end of dropdown button)

  • @ABDULLASHAIK-yp8qf
    @ABDULLASHAIK-yp8qf Год назад +2

    bro alignRight from drop down is not working .please help me

  • @himankshu
    @himankshu 5 месяцев назад

    So what will happen if you add some items and then hard refresh the page? Does the cart items updated to its initial state? If yes, how would you fix it?

  • @andymarsh4643
    @andymarsh4643 2 года назад

    Please make a video on React Native Fingerprint/Biometric authentication

  • @celticspyd5887
    @celticspyd5887 3 месяца назад

    sir i want to know If a customer clicks on order btn to order and the order list should received at the admins page/panel without any database or backend possible?? if yes how sir?

  • @rounakbhattacherje3426
    @rounakbhattacherje3426 Год назад

    in the filter component for the stars , the onClick prop is receiving back the (i=index) from its Rating component , but in react data flow direction is unidirectional, so how is this phenomenon possible??? anybody who understood- care to explain, (i m very new to react, hence this is something very new to me). Thanks in advance

  • @user-ys1hr7iu9b
    @user-ys1hr7iu9b 11 месяцев назад +1

    I found the error while installing the faker, anyone can help me in this?
    Error- Module not found: Error: Can't resolve 'faker' in 'D:\Projects\e-commerce\src\context'

  • @ronyroy3587
    @ronyroy3587 3 месяца назад

    How I will create increment and decrement button . Alternative of select and option. Can you tell me. I created but not working properly

  • @viditkumarjain1994
    @viditkumarjain1994 2 года назад

    Hi try to make the same getting error when trying to add or remove to cart button

  • @wayofexcellence3629
    @wayofexcellence3629 Год назад

    how can be used local storage to persist state in cart

  • @marcelalasso8249
    @marcelalasso8249 Год назад

    Thanks for this explanation!, if somebody Know why image faker is broken ,I would appreciate it.. reggards!

  • @emmanueloluwafemi7236
    @emmanueloluwafemi7236 2 года назад

    If you are watching this tutorial now. Use Routes to wrap your route and also use element={} in the route.
    Please sir, I am a developer and I am looking for a job nice job. Where can I get that

  • @sanyamjain4777
    @sanyamjain4777 2 года назад

    Can i use api endpoint to get fake data will it work the same?

  • @siscoo5763
    @siscoo5763 Год назад

    hi guys please if someone faced this prob , when i get data from my api even if api contain data its not setting it in products state , how to fix that