Turning bad React code into senior React code

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ก.ย. 2024
  • Join The Discord! → discord.cosden...
    Welcome to Code Review!
    This is a series of videos where I review code that you send me or that I find online. I review the code as I would when I work with my clients. You will see how a senior developer looks and thinks about code in a variety of scenarios, learn about best practices and how to do things the right way, and learn how to become a better developer overall.
    Enjoy!
    Darius

ความคิดเห็น • 144

  • @icoderdev
    @icoderdev ปีที่แล้ว +46

    Restructuring another Developer's code is one of the highest skill to possess. Thanks cosden solutions

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว +4

      You're most welcome ☺️

    • @kollpotato
      @kollpotato ปีที่แล้ว +8

      Not always, because it's much easier to see other people's mistakes than your own.

    • @owenwexler7214
      @owenwexler7214 ปีที่แล้ว +8

      Refactoring your own code from more than 6 months ago is essentially the same thing.

  • @novailoveyou
    @novailoveyou ปีที่แล้ว +74

    The first example has more to learn! Take the routes variable outside of the App component and put it on the same scope as App. That way we're saving ourselves a bit of performance and improving reliability. Also const variables like routes we could name ROUTES in all caps to indicate that that's something constant and within our frontend App

  • @vojinmilovic5787
    @vojinmilovic5787 ปีที่แล้ว +138

    I don’t think anyone mentioned that the access token was passed through url which is as insecure as it can be

    • @simonesquillace1624
      @simonesquillace1624 ปีที่แล้ว +14

      Yea, he refactor bad react code… so yes looks good but the implementation still sucks. Honestly doesn’t look senior to me

    • @emanuellamba5828
      @emanuellamba5828 ปีที่แล้ว +3

      I'm not a Web Dev but that was my first thought too

    • @weiss588
      @weiss588 ปีที่แล้ว

      how should it be passed then?

    • @emanuellamba5828
      @emanuellamba5828 ปีที่แล้ว

      @@weiss588 through POST calls to the server

    • @santiagobarrera2387
      @santiagobarrera2387 ปีที่แล้ว

      @@weiss588An authorization header (bearer token) or cookies. And that can only be considered secure if the connection is made over HTTPS, otherwise there’s no (simple/elegant) secure way

  • @2gbeh
    @2gbeh ปีที่แล้ว +60

    Perfect, but one more thing, your custom hook is supposed to accept the api endpoint as a parameter because its actually different in both places used from the original code. That is, "survey/link/pd-.." and "survey/link/energy-.."

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว +17

      Yes you're totally right! Realized this after I filmed the video 🥲

  • @harag9
    @harag9 11 หลายเดือนก่อน +4

    Just found your channel, and watching some of your stuff (and subbed). the useEffect actually runs twice and you should code it as such, it runs twice in DEV mode, but when live it will run once. React 18 is when I believed this changed. Because you're calling an API in the useEffect, you will also need an Abortcontroller, and a cleanup in the useEffect to abort the first run. It's a good habit to get into. So far liking your channel.

    • @cosdensolutions
      @cosdensolutions  11 หลายเดือนก่อน +1

      yep, you are totally correct! glad you enjoy the videos!

  • @hritikkumar2554
    @hritikkumar2554 ปีที่แล้ว +5

    Sol 1: we can also fetch the path text when it gets clicked and we define the onClick method in context and then we can set the path by string concatenation.
    This will help us to get rid of the array that you just created.

  • @zyph.
    @zyph. 6 หลายเดือนก่อน +1

    Nice video that shows your thought process. I don’t agree that turning the routes into an array is making the code simpler / more readable. It makes it less flexible. Imo a better solution would be to create e.g. a AppRoute component that hides a lot of the boilerplate for you. Feels more React-ty

  • @muhammadashfaq913
    @muhammadashfaq913 44 นาทีที่ผ่านมา

    Hi @Codesen
    Please create a detailed video on contributing to react-native open source and approach to solve a problem. Thanks. You are amazing.

  • @amey4521
    @amey4521 ปีที่แล้ว +5

    A more efficient way of handling protected routes would be to create an protected route component to wrap unprotected routes.

    • @michaelczolko6093
      @michaelczolko6093 8 หลายเดือนก่อน

      100% agree, senior developers use composition instead of props in object array and later mapping with conditionals...

  • @saqibmuhammad7218
    @saqibmuhammad7218 ปีที่แล้ว +1

    One of your well wisher and Keep it Up you are doing amazing work. I learn a lot of things from your videos and shorts,❤

  • @slavenDj
    @slavenDj ปีที่แล้ว +4

    Great video. I use shortcut F2 to rename variables, saves a lot of time, and it's safer.

  • @Shaheer-xs5os
    @Shaheer-xs5os ปีที่แล้ว +4

    Man you are one of the best teacher ever, I have watched your react-hook videos and they're so good, respect you 💕

  • @Alxndr0
    @Alxndr0 ปีที่แล้ว +2

    Nowadays everybody with good speech in a relaxed environment can be seniors 😂

  • @irfansaeedkhan7242
    @irfansaeedkhan7242 หลายเดือนก่อน

    as senior developer once told me that do minimum code in jsx so i would recommend do the map outside jsx and just use the variable with complete list in jsx

    • @cosdensolutions
      @cosdensolutions  หลายเดือนก่อน +1

      it's all the same tbh. Matter of preference at this point!

    • @irfansaeedkhan7242
      @irfansaeedkhan7242 หลายเดือนก่อน

      @@cosdensolutions ohh so there is no good practice bad practice in this regard, its just that how you prefer , or it looks cleaner to you

  • @AnPham-uz3td
    @AnPham-uz3td ปีที่แล้ว +6

    At 1:50 I completely disagree with you, in a fast pace code changing webapp, I usually see people rewriting/enhancing the root routing of the app (like adding a new login OAuth handler, add logic to track user behavior on specific route of the app with utm, etc). Rewriting it to an array and .map does make the code smaller, yet it makes the code coupling (please google the term "coupling") into your own logic, hence it may gets in other developer's way if they want to add new feature, which is bad for new feature and bad for the business.
    Actually, the more time I live inside the coding world, the more I see that the best code is the most simple one !

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      Fair point, but this is a mature project and for its use cases this was an improvement. But it ultimately depends on the project. Not every project needs a complex routing structure

    • @siroccomask
      @siroccomask ปีที่แล้ว +1

      @@cosdensolutions Nearly every routing file looks like the one you showed. It's already easy to read, and add a route. If I open the routing file and it has a loop in it just to reduce the lines in the file, I am not seeing how this is improving readability.

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      @@siroccomask it's making you not have to repeat all of the same components and auth router. If they're all the same, it's just easier to have a loop so you have one place to look at how everything is rendered

    • @m.syafaat
      @m.syafaat ปีที่แล้ว +6

      ​@@cosdensolutions You seem to be misunderstanding the concept of "repetition" or you might heard of the DRY (Don't Repeat Yourself) principle. In this case, converting your component into a map doesn't actually improve your code, it could make it worse. It appears that you're introducing a new approach to rendering your routes, which doesn't necessarily align with good coding practices. If this were in my team, I would likely express my confusion with a "WTF", and then suggest, "Please, consider creating a new Route Component named AuthRoute and use it like a standard Route: .".
      Every time I see people doing something like this, I'm 100% sure that it's a sign of a junior developer.

    • @filipecovas
      @filipecovas ปีที่แล้ว +1

      Completely agree, the map will increase the coupling and decrease de legibility and also some bad performance.

  • @irfansaeedkhan7242
    @irfansaeedkhan7242 หลายเดือนก่อน

    keep this series going sir

  • @dylanarmstrong9328
    @dylanarmstrong9328 ปีที่แล้ว

    As someone who uses the nextjs framework watching you go through the route code was really funny to me. Great solutions though because of dry principle. 😁

  • @Gilderbrant
    @Gilderbrant ปีที่แล้ว +27

    7:25 I think this pattern is used to prevent double call of useEffect in the strict mode (react 18).

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว +9

      could be yes, but that's totally the wrong way to approach it

    • @muratcemyalin
      @muratcemyalin ปีที่แล้ว +8

      you just could have memoize the function with usecallback and give it to useeffect dependency array

    • @Isaac-hd6vs
      @Isaac-hd6vs ปีที่แล้ว +10

      @@cosdensolutionsyou sure? That’s how the new react doc suggests clean-ups do be done

    • @rosssharma542
      @rosssharma542 ปีที่แล้ว +1

      @@cosdensolutions What's the right approach? This is the pattern suggested in the official React docs.

    • @inakiarias7465
      @inakiarias7465 ปีที่แล้ว +2

      I think the point of Strict Mode running Effects twice is so that you can notice if your effects have unintended side effects if they run more than once. In this case it does, the fetch is running twice, so according to "good practices" you are making an error.
      The usual way to solve this "fetch inside useEffect" is to use the AbortController technique, where you pass a signal to the fetch call, and when you return from the effect, inside the cleanup function you abort with controller.abort.
      You can google it pretty easily, but basically each time the effect runs it will cancel the previous fetch, which should be "intended behaviour"

  • @pyyrr
    @pyyrr ปีที่แล้ว

    code in the thumbnail is absolutely amazing

  • @LePhenixGD
    @LePhenixGD ปีที่แล้ว +4

    6:20 I believe you should've used the .set() method of the .searchParams setter instead of directly assigning a new URLSearchParams object, if you wanted to assign the parameters your way you should use the .search setter instead

  • @cezarygrzanka4229
    @cezarygrzanka4229 ปีที่แล้ว +2

    4:10 and now... you just receive mail that some routes has to be wrapped in other component, that some of them may be exact, and for some reason to one of them you have to pass params. I think you just unnecesary complicated quite simple part od code just to reduce couple LOC 🤔

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      Again, you can create as many hypotheticals as you want. I reviewed this for this scenario, which is valid

  • @calefnicoft
    @calefnicoft 2 หลายเดือนก่อน

    Thaaanks! amazing 🥰

  • @sbabup8957
    @sbabup8957 11 หลายเดือนก่อน

    Never subscribed to anyone before, You are the first. Keep up the good work!! Also whats the font in your editor? I liked it alot..

    • @cosdensolutions
      @cosdensolutions  11 หลายเดือนก่อน

      damn, that means a lot! I use the menlo, monaco font. My next video is actually all about my custom vscode setup!

  • @sonhuynh570
    @sonhuynh570 ปีที่แล้ว

    this process remind me the old time lmao btw great vid and keep it up bro

  • @thecyberhobbit
    @thecyberhobbit ปีที่แล้ว

    "Route" !== "Root" 🤣😂
    Jokes aside, nice video dude, keep it goin!

    • @thechaoslp2047
      @thechaoslp2047 16 วันที่ผ่านมา

      Its the correct british pronunciation

    • @thecyberhobbit
      @thecyberhobbit 16 วันที่ผ่านมา

      @@thechaoslp2047 right... that's why I said "jokes aside"

  • @zebapy
    @zebapy 2 หลายเดือนก่อน

    First thing I'd do is add and run Prettier.

  • @aymenbachiri-yh2hd
    @aymenbachiri-yh2hd 4 หลายเดือนก่อน

    Thank You

  • @rajendra222php
    @rajendra222php 8 หลายเดือนก่อน

    we need more video like this

  • @tunoajohnson256
    @tunoajohnson256 11 หลายเดือนก่อน

    Good stuff! Cheers for sharing

  • @osamaakhtar6525
    @osamaakhtar6525 ปีที่แล้ว +2

    4:15 Interestingly enough you could have placed the routes object outside the App component since it didn’t depend on any reactive variable.

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      Yeah you could've, but that's just personal preference at that point! Wouldn't affect performance in any way

    • @muratcemyalin
      @muratcemyalin ปีที่แล้ว +2

      @@cosdensolutions i am using the same technic with just making a seperate routes.js file and exporting routes from there and importing to app just a little bit cleaner.

  • @DamilolaBada-x3x
    @DamilolaBada-x3x 11 หลายเดือนก่อน

    Nice and informative video. Do you by chance have any video about organising files according to features and not types in nextjs?

    • @cosdensolutions
      @cosdensolutions  11 หลายเดือนก่อน

      I have a video on general folder structures in React, but nothing that specific unfortunately

  • @devyb-cc
    @devyb-cc 11 หลายเดือนก่อน

    i believe react router has component called RouterProvider to handle the first use case.

  • @RiyazShaikh-o3v
    @RiyazShaikh-o3v ปีที่แล้ว

    please make one javascript tutorial you are explaining fabulous

  • @captsiro233
    @captsiro233 ปีที่แล้ว +1

    Why do you have vim plugin if you are still using mouse... I don't have vim plugin and I use my mouse less.

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      It's not a competition 😅 to each their own

  • @tunamusic2314
    @tunamusic2314 2 หลายเดือนก่อน

    how can you select multiple same word and update name , which extension bro ?

  • @hritikkumar2554
    @hritikkumar2554 ปีที่แล้ว

    And yes, you are awesome 👍

  • @WolfamStart
    @WolfamStart ปีที่แล้ว +5

    Where are the tests, to prove you don't change the functionality?

  • @piotrzajas9014
    @piotrzajas9014 ปีที่แล้ว

    4:04 - You can prolly delete the at the end of map func and make the a self closing tag?

  • @nicolamigone8849
    @nicolamigone8849 ปีที่แล้ว

    Are you going to do more of these? I'd love to have my code reviewed

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      Yes! Post it in the Discord there's a channel for that

  • @imrahulkhatri
    @imrahulkhatri 11 หลายเดือนก่อน

    Very helpful

  • @carlosmaralit8784
    @carlosmaralit8784 ปีที่แล้ว

    this is so useful, can you also make like this with codeigniter? thanks

  • @groovebird812
    @groovebird812 ปีที่แล้ว

    First you return generateURL, AuthToken and url and at the end end of the video only url? This was to quick for me

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      Yeah I thought initially we would need to return all 3, then we only needed the token so I changed it

  • @marcossequeira5433
    @marcossequeira5433 11 หลายเดือนก่อน

    It could be a better solution use an AuthGuard component and pass as childrens all the routes that you want to be protected?

    • @cosdensolutions
      @cosdensolutions  11 หลายเดือนก่อน

      depends how the component is structured. Maybe it doesn't allow this this way. But worth a try

  • @navidghasemi9685
    @navidghasemi9685 ปีที่แล้ว

    great that was helpful

  • @dgoenka1
    @dgoenka1 ปีที่แล้ว

    1:55 how about a custom component and pass it to that?

  • @Vagabondi404
    @Vagabondi404 ปีที่แล้ว

    Very nice

  • @af2b
    @af2b ปีที่แล้ว

    Amazing

  • @isaacjon
    @isaacjon ปีที่แล้ว

    U said that we cant use state in a custom hook. What does that mean? U just used useEffect and useState hooks in this custom useGeneretaeUrl hook.

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      Hmm, where did I say that? You Def can use hooks in custom hooks!

    • @isaacjon
      @isaacjon ปีที่แล้ว

      ​@@cosdensolutions9:45 can you check and explain it please

    • @samansaeedi1498
      @samansaeedi1498 ปีที่แล้ว

      He says you CAN, and that's the beauty of it

    • @isaacjon
      @isaacjon ปีที่แล้ว

      @@samansaeedi1498 ahh i got it. It sounded like (can't)

  • @helios8567
    @helios8567 11 หลายเดือนก่อน +1

    you did the code better, but it's stil crap. You could do this code a lot more cleaner. Not a senior level imho.

  • @kirillvoloshin2065
    @kirillvoloshin2065 ปีที่แล้ว

    got to propose to switch to TS

  • @SacrificialGoat94
    @SacrificialGoat94 ปีที่แล้ว

    Isn't sticking the access token in the search params a horrible idea?

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      you would usually put it in the headers of the request

    • @SacrificialGoat94
      @SacrificialGoat94 ปีที่แล้ว +3

      @@cosdensolutions Really sherlock? Yet you did not mention that while creating "Senior level code" perhaps you're not quite ready to be making such claims.

  • @dhruv7827
    @dhruv7827 ปีที่แล้ว

    What is that tool that is suggesting you the code? Is it an extension?

    • @harag9
      @harag9 11 หลายเดือนก่อน

      Co-Pilot. It costs per month to use, not sure how much.

  • @p1erceprc
    @p1erceprc 11 หลายเดือนก่อน

    What theme is this? thanks

  • @tauraamui
    @tauraamui ปีที่แล้ว

    not related, but I've never seen someone using VIM or the VIM plugin on an editor but completely defeat the point by just using the mouse, it's painful to watch

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      Well, what can I say.. I'm sorry you feel this way 😅

  • @savire.ergheiz
    @savire.ergheiz ปีที่แล้ว

    There is no such things as bad code. Any senior engineer always know that fact.
    There are only codes that carelessly being made due to many reasons.
    If you said its a bad code then how you justify those bugs that always goes into production no matter how good or big the companies behind?

  • @jotasenator
    @jotasenator ปีที่แล้ว

    8:04 🤕

  • @ask43242flight
    @ask43242flight ปีที่แล้ว

    Do you have a tutorial that shows how to embed JavaScript code within HTML(i.e. JSX)? I don't have solid knowledge to know when I should use () and when I should use {}. Basically, I highly depend on VSCode to help finding issues for me while I am write JSX code. Thank you

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว +1

      Hmm not specifically, but in every video I kinda do that 😅 it just comes with time! So keep practicing

  • @gustionusamba90
    @gustionusamba90 ปีที่แล้ว

    What is the theme and font do you use?

  • @ooorayooonyoooo
    @ooorayooonyoooo ปีที่แล้ว

    what is your color theme mate?

  • @icoderdev
    @icoderdev ปีที่แล้ว

  • @john_dren
    @john_dren ปีที่แล้ว

    I found it funny how the refactoring takes you like 5 min tbut a junior like me half a day or a day :D

    • @cosdensolutions
      @cosdensolutions  ปีที่แล้ว

      hahaha it comes with time! keep at it 🤙