Declarative Routes for NextJS and React-Router: DRY Routing

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 พ.ย. 2024

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

  • @grugbrain
    @grugbrain 7 หลายเดือนก่อน +71

    You are the tech consultant of my company. 🤣

  • @josiahayres737
    @josiahayres737 7 หลายเดือนก่อน +7

    I did not realise how much react routing sucked until I watched this video, I have to try this immediately. Calling out that you can incrementally adopt is what really sold me 🔥

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

      This is not React, it's Next. If you are using just React try Tanstack Router.

  • @jackn
    @jackn 7 หลายเดือนก่อน +17

    top tier content. who even needs trpc or tanstack router anymore

    • @vty4261
      @vty4261 7 หลายเดือนก่อน +3

      is that a joke?

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

      ​@@vty4261no. TS has enough features on its own to be a type-safety contract generator. both trpc and ts-router are basically just doing the same thing with more complexity

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

      @@vty4261it definitely is cos wtf? Did he really said Tanstack for what?

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

      Wtf you mean??

    • @jackn
      @jackn 7 หลายเดือนก่อน +3

      ​@@Osirisdigitalagency it's not a joke, this is basically all tanstack router and trpc are doing is generating typescript contracts. they basically serve no other purpose than what was shown in the video
      if you can achieve this with plain TS why would you need a library for it

  • @rogerscript
    @rogerscript 7 หลายเดือนก่อน +2

    As usual, every video from you is awesome, I become a better developer every week thank to your channel, I really appreciate your work.

  • @alexleung842
    @alexleung842 7 หลายเดือนก่อน +4

    Nice. I'm surprised this doesn't exist already

    • @jherr
      @jherr  7 หลายเดือนก่อน +2

      Right?!?

  • @jqbits
    @jqbits 7 หลายเดือนก่อน +3

    I am looking to do the same thing for remix!
    Awesome video as always!

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

      Feel free to jump in and contribute. There is a React-Router version there already, but it only works with the routes object declaration usage of React Router. So we'd need a version that would work with Remix's file routing. There are just so many variations of router setup out there.

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

    Awsome!! I need this in my app. I am done writing links everywhere.

  • @mattwooddc
    @mattwooddc 7 หลายเดือนก่อน +2

    Awesome video, Jack. Thank you!

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

    Looks cool, will try it in my next todo app

  • @VincentFulco
    @VincentFulco 7 หลายเดือนก่อน +2

    Awesome, looking forward to digging in...

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

    Really nice solution, I will give it a try! Thank you, great work here 👍

  • @sebastianlpoliak
    @sebastianlpoliak 7 หลายเดือนก่อน +2

    WOooo amazing!! looking forward to check it

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

    You are a godsend in the community

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

    This is a really good idea. Taking this for my projects ❤

  • @jhamama-me
    @jhamama-me 7 หลายเดือนก่อน +1

    This reminds me of the work done by ethan on next-typesafe-url ( cant paste links ) :( ! Super awesome stuff and works pretty well in my projects to solve the same problem :)

  • @highrankin
    @highrankin 7 หลายเดือนก่อน +2

    This looks great. Thank you!

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

    Ver nice, this is a real new approach right?! I like it!

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

      Kinda? It's built on top of what Flightcontrol did, but substantially improved. The scanner/builder is new, the whole API wrapping system is new, and the support for other types of routers is new. The React-Router support has some crazy hierarchich TypeScript generics in it that were fun to figure out. I should do a video on that. Arguably the React-Router implementation is even cooler since you can just change an entry in a table and all the routes change automagically.
      I don't know, or really even think, that this will be the end solution in this space. I just wanted to push the ball forward a little to see where other folks take it.

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

    Ok, this is dope.
    The one thing that I would've preferred is if all the links were exported from one object.
    So something like `Link.Home` and `Link.Search` while the APIs would be something like `API.Search` and `API.Edit`, that way everything feels a bit more centralized

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

      Hmmm... Could be a cool option.

  • @airixxxx
    @airixxxx 7 หลายเดือนก่อน +2

    I've always done that by myself on my projects, it's one of the reasons I don't like Next directory based router. In the React standalone days, I would create all the routing from an constant object. If one route needed to change you only had to change that object, with Next you can't do that, you need to change the names and location of folders and in the code as well.

  • @Noam-Bahar
    @Noam-Bahar 4 หลายเดือนก่อน +1

    This is AWESOME!!!

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

    I'll start using this on my app right a way thanks! 🎉

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

    Thank you Jack!

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

    Great content! 👏👏 thank you! 🙏

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

    This is awesome! But one thing I’m thinking is that generally the routing doesn’t need to change often on the app, and if it does then imo it’s a bigger issue with the application

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

      In evolved apps I think you are right. In early apps for small teams this could be a real ass-saver.

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

    I know it’s zoomed but your terminal looks like a pack of m&ms. Nice video btw 🎉

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

    Really nice! Thanks

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

    this is VERY useful 🙌🏼🙌🏼🙌🏼

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

    Hi Jack, thank you a lot for the effort you put in the channel. It helps a lot of people grow and that so valuable. I have a question... is there a way to handle catch all routes too? Thanks again|

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

    That's actually very interesting

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

    This declarative routing really takes any project to the next level!
    I have a question about the example using getPokemonSearchAPI. Shouldn’t we first validate the backend response using zod’s parse or safeParse to prevent any backend model changes from breaking our application?
    Thank you!

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

    Nice approach, thanks! What about dynamic routes? when I need to use same routes as Link in one place and in route.push() in other?

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

    Great as always ❤.

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

    Dang this really is cool.

  • @iamcasted
    @iamcasted 7 หลายเดือนก่อน +2

    I used to do an object in a config file which contained all routes

    • @coherentpanda7115
      @coherentpanda7115 7 หลายเดือนก่อน +2

      That's how we do it,, has always worked well. This package does neat things, I think it would be useful for taking over maintenance of an app that has all of the links hardcoded. Not sure I'd ever use it in a new project, though.

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

    That’s another perfect video 🎉

  • @djibrilm__-
    @djibrilm__- 7 หลายเดือนก่อน

    Any vidoe or course on how we can build such thing it doesn't have to be a strong as the original library...
    That can be the ultimate senior front end video ever posted on TH-cam
    Whag a flex having such project sitting on my portfolio.
    Hope my comment get noticed by the author.

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

    great voice i like it , thanks

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

    Amazing 🔥🔥

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

    Awesome!
    Can you please make a video about Vercel's Generative UI. 🙏

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

    You are awesome 👌

  • @zanzaraloggan3713
    @zanzaraloggan3713 7 หลายเดือนก่อน +3

    I usually put my routes in variables... then I do just const userRoute = 'user/:id'; and then userRoute.replace(':id', user.id)

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

      Why not create a function that returns the string? const createUserRoute = (id) => `user/${id}`;? Seems more sensible compared to userRoute.replace because you don't have to know what specific string you have to replace, you just pass in arguments.

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

    Looking forward to contribute! Which repo is it? Found the demo repo but not the package one 😅

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

    Do you have any video with your vscode theme, icons, font, terminal, etc. ?

  • @Hacking-Kitten
    @Hacking-Kitten 7 หลายเดือนก่อน +1

    if you have to change your routing at a point where you have tons of references you have a problem anyways.. breaking links on the customer side

  • @mzerone-g6m
    @mzerone-g6m 7 หลายเดือนก่อน +1

    I think it is awesome

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

    I think something like this already exists for Next.js, IIRC it's called next-typesafe-url.
    As for pure React, tanstack router is (IMO) a more reliable option.

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

      Interesting, I still have to manage that URL as a string every time I use the link though. Plus from the little video attached to the github page the resultant code to build the href is pretty long. Also, it only handles page routes and not API routes.

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

      @@jherr Fair enough

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

    what's wrong with a recursive sed -i substitute command? It wil take much longer to figure out what's going on if I find this declarative routing stuff in an old project two years from now... AND to remember to have to run some binary with a specific pnpm version and AAARGH...

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

      Well, it's not a binary, and all of the source is in your source, but if you don't want to use it that's totally fine by me.

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

      ​@@jherr thanks... sorry I had a stressful day and may have overreacted

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

    Links from the "Installation" section of NPM lead to a 404 page.

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

    which extension to edit multiple line >

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

    He is GOLD 🪙

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

    Where is the repository link for this project?

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

      github.com/ProNextJS/declarative-routing

  • @hassan.tl94
    @hassan.tl94 7 หลายเดือนก่อน

    Hi Jack, great tutorial, one thing I noticed the package doesn't take into account is folder groups. I have grouped features of the app under folder like `(marketing)` or `(users)` under app folder and the routes created are `/(marketing)/(home)` even though it should be `/` - so perhaps ignoring the folder groups would be a great addition to the package

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

      Feel free to contribute that. Or add an issue and someone else might pick that up. I'll definitely be working on this more, but at the moment the course is my daily top priority.

    • @hassan.tl94
      @hassan.tl94 7 หลายเดือนก่อน

      @@jherr yes I can look into that, I couldn't find the repository for declarative routing - can you provide the link?

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

      @@hassan.tl94 github.com/ProNextJS/declarative-routing

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

    This is great work. Can it be used with tanstack-router with vite

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

      With Vite you can use React-Router. Tanstack is a little tricker, I would need to work with that team to figure out integration into TSR and their Vite plugin.

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

      @@jherr thanks please

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

      @jherr I will check it out with react-router

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

    I prefer to use function that return url
    So if I need to give this url to custom component with href or to navigate, I can

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

      Then just call the function directly and it will return the URL, as shown in the video.

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

    Thanks for this. May I ask how you customized your Shell? Thanks!

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

      It's oh-my-posh on top of oh-my-zsh.

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

      @@jherr Thanks!

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

    The video is nice, but I don't see the need for the library. Typically, I store the endpoints in a standard JSON file and import them wherever necessary. If I need to change an endpoint, I only update the JSON file, and the changes are reflected everywhere. This keeps the syntax of routing components consistent and avoids confusion for anyone who works on the project later.

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

    I hate this in react, magic strings everywhere.. I just wanted the native router to support route tags so you define route strings once but links can point to route tags.. good alternative but think the main Devs should have done a lot better

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

    That's a really nice system, I was curious to dig into the project's code to better understand it but it seems you don't ship the non uglified code of declarative-router, that's a curious choice..? 🤔

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

      Here is a link to the repo: github.com/ProNextJS/declarative-routing

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

      @@jherr thanks, totally missed that 😅👍

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

    This is pretty cool! How do you handle error handling with API routes?

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

      It's a promise, you can do a catch on it to catch the errors.

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

    I like it, I will try it in my project, but can it be used on server actions?

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

      I don't see why you couldn't use it in a server action, but server actions don't need them since NextJS handle the routing on that automatically.

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

      Oh I get it 🤣

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

    Who is your favorite pokemon and what makes it special?

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

      Gumshoos. He's terrible and he looks a little like me.

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

    Hi Jack, my index.ts is not correctly making the imports because it's using backslashes instead of forward slashes.

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

      Are you on windows?

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

      @@jherr yes I am Jack

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

    Sorry to highjack this video, Jack. I've got a request that I'm sure you're capable of answering. With TRPC and Prisma, do you have a recommendation on how to do multivariant products design, such as size, color, or any other custom variant group? I'm struggling a lot with how to handle it when not having concrete tables such as size, color, etc. I've looked into the EAV design theory, but can't seem to apply it with "pivot tables" using Prisma.

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

      Feel free to jump on the Discord server and ask your question there. Please read and follow the #rules before posting, it's an all volunteer support service.

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

    Its failing with NextJS latest version 14.2

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

    🔥LGTM

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

    What is optimal way to keep main process and watchers from all different tools active without opening 100500 terminals? Can you make video on this topic?

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

      Use the concurrently library.

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

    how about using it with Nx monorepo?

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

      I don't see why that would be a problem, you'd just have to launch it as in the context of the repo. It just runs `pnpm add` (or whatever your package manager is) so hopefully that works. I don't like that NX removes package.jsons.

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

      I am gonna give it a go, keep you posted

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

    Dr. Build

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

    i am missing readme and examples

  • @SanderCokart
    @SanderCokart 7 หลายเดือนก่อน +2

    How can this use dot notation in a server component wtf?

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

      Crap, that's true. I forgot about that.

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

      @@jherr so how is your example not crashing? 😅

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

      @@SanderCokart I've forgotten the constraint. It might fail on build. I'll check it out. Either way, you can fall back on using the string variant. Or... you can change the code so that the component is the primary export, so it would be `` instead. The code is just copied into your repo like shadcn.

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

      @@jherr it should've failed on dev too.

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

    Your course status?

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

      Going really good. Release late this month or early next. I'm really proud of it.

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

      @@jherr That's really exciting!

  • @Joshua-dc4un
    @Joshua-dc4un 7 หลายเดือนก่อน

    The validation is a bit unnecessary given it's used in the same application. Typescript covers most of that use case

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

      Which validation part?

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

    Rly you didn't left the link on NPM, why?

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

      Good point: www.npmjs.com/package/declarative-routing

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

      @@jherr TY. I meant about description below the video
      Have a good one!

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

      I added it there too ty

  • @rajaark5643
    @rajaark5643 27 วันที่ผ่านมา

    Tanstack router do this

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

    This is cool, but for the love of god , do not add this to your company’s nextjs project. It’s like react devs are plagued with the curse of abstracting everything, on top of that this adds another build step and another dependency to the mammoth that is the node modules folder.

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

      Except that this doesn't actually add to the node_modules folder beyond zod and and the URL parser.

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

      @@jherr happy to be proven wrong.

  • @Its-InderjeetSinghGill
    @Its-InderjeetSinghGill 7 หลายเดือนก่อน +1

    Awesome solution Jack, I really appreciate you hard work🫡