The Better Way to Manage React State

Поділитися
Вставка
  • Опубліковано 5 лис 2024

КОМЕНТАРІ • 144

  • @franky47
    @franky47 День тому +178

    Thanks Josh! (I'm the author of nuqs). Most people pronounce it "nucks", I pronounce it "nukes" but I'm getting around to it. AMA.

    • @ahmedhassan_saver
      @ahmedhassan_saver День тому +4

      When he typed withDefault("josh") - Why didn't the url start with name=josh ?? - it should have started with this, right? 4:59

    • @kennedymungai1
      @kennedymungai1 День тому +1

      Cool package bro

    • @ahmedhassan_saver
      @ahmedhassan_saver День тому

      And i think u should add some type if configuration to determine whether delete false param or not to delete falsy params but not the 0 value , so if the param is name= it should be removed entirely may be this should be in the third param or something or the second param should be object that has key for default value and another key for this -- i can contribute and do this if u like and if it doesn't already exist because i didn't try it

    • @franky47
      @franky47 День тому

      ​@@ahmedhassan_saver This is the `clearOnDefault` behaviour/option: when the state is set to the default value (here "josh"), it's not reflected in the URL to save space (remember URLs have limited size). If the default had been an empty string (which is more common), then you'd get no search params when clearing the input, which feels more natural.

    • @sK4hsCz
      @sK4hsCz День тому

      @@ahmedhassan_saver First I have to give my two cents, then say directly what is wrong and finally admit that I haven't even looked at the code. Just WOW, dude! xD
      @franky47 I knew it ^^ start testing right away

  • @Hugos68
    @Hugos68 День тому +68

    We're developing backwards if storing state in the URL is rediscovered 😄Great video though!

    • @simonhartley9158
      @simonhartley9158 День тому +1

      I think it's a baby with the bathwater scenario. People tried all URL state, then no URL state and now settling on a mix.

    • @PraiseYeezus
      @PraiseYeezus День тому +7

      it's not being "rediscovered" it's being adapted to eliminate the trade offs that it used to have (another request to the server, stale values, etc)

    • @debarkamondal6406
      @debarkamondal6406 День тому

      exactly write a function yourself. Once you get the hang of it its easy. I don't understand it existing as a separate library.

    • @ianik-br
      @ianik-br День тому

      Every 20 years many products, services and functions are relaunched for the new generations like "new discoveries"

    • @debarkamondal6406
      @debarkamondal6406 12 годин тому

      @@ianik-br the main point is. You can install and read documentation to work with another library and make client heavy instead of using things already provided. It's not that hard either

  • @mahmoudwalid1703
    @mahmoudwalid1703 День тому +6

    This package is very useful and time-saving. I will use it in my projects

  • @killswitch.
    @killswitch. День тому +2

    2:16 This "In-Memory" term has been living in my head rent-free for so long. Thanks boss, I just freed up some space.

  • @ErmandDurro
    @ErmandDurro День тому +2

    Wow so cool. Thank you Josh for showing this 😃

  • @devkasunlakshitha
    @devkasunlakshitha День тому +4

    Brother, Thanks a lot for this! Really cool and useful!

  • @makerKID5
    @makerKID5 День тому

    Josh, I just want to thank you. You're my number #1 source for keeping up to date in this ever changing behemoth we call tech. You're the best. I saw you're video yesterday and I just want you to know how much you're helping others. I'd watch anything you put out.

  • @aliarefjs
    @aliarefjs День тому +1

    Life saver video, Josh! Thanks a ton!!

  • @saissevictor
    @saissevictor День тому +2

    checked this in the midday repo, amazing work from frank

  • @FunctionGermany
    @FunctionGermany День тому +5

    if you're using react-router or tanstack router, you want to use their URL+state features instead of another library.

    • @paw565
      @paw565 18 годин тому

      It's primary for next js I think

  • @essayvlog
    @essayvlog День тому +1

    Thanks for letting us know the amazing library

  • @paw565
    @paw565 18 годин тому

    That's actually epic! ❤

  • @gvsakhil143
    @gvsakhil143 День тому +1

    Its very useful, thanks a lot dude

  • @mzafarr
    @mzafarr День тому

    Such short videos are really useful

  • @childe2001
    @childe2001 19 годин тому

    Thanks for the explanation!

  • @floooooo33
    @floooooo33 День тому

    every 3 month, there's new react state management package that's super useful

  • @abdullahisalihu8107
    @abdullahisalihu8107 День тому +1

    This is game changing

  • @meka4996
    @meka4996 День тому +1

    Amazing! Thanks

  • @codernerd7076
    @codernerd7076 День тому +4

    Oh it's November, and a new react state management is out, don't use this one for any sensitive data...😅

    • @joostschuur
      @joostschuur День тому

      nuqs (the topic of this video) has been out for over 4 years and has close to 5k stars on GitHub. 2.0 just came out.

  • @virtual5754
    @virtual5754 День тому +2

    Have been using it since next 13. Main benefit of this library is that it allows to abstract updating url without extra requests to server. Next team, are you for real? It has been two years since release of app router, where is native shallow refresh?

  • @Paul_Marek
    @Paul_Marek День тому +2

    How did you get it to create a hash for some of the content that you wanted to make obscured/private in the url?

  • @dragos.cojocaru
    @dragos.cojocaru День тому +8

    These guys reinvented react router

    • @FunctionGermany
      @FunctionGermany День тому

      not really. connecting URL and state is just one of many features that router libraries or frameworks may support.
      this library just focuses on this one aspect and that's fine. maybe you already have a router you can't change but that doesn't support this feature, then it's useful.

  • @gobeksalata
    @gobeksalata 18 годин тому

    the first example would pollute the window.history real quick, best way is to store them after a form submit or saving state with debouncing.

    • @DJDrewDub
      @DJDrewDub 13 хвилин тому

      I mean you could remove the previous history at the same time as setting the current, I'd hope the author thought of this.

  • @LlamaPony
    @LlamaPony День тому +1

    lol setting up query params always been a hassle, this makes it as easy as squeezing a lemon

    • @LlamaPony
      @LlamaPony День тому +1

      or probably easier

  • @victorm3193
    @victorm3193 День тому

    Hi Josh. Can you do a deep dive in unit testing Nextjs apps?

  • @MichaelLo-i5v
    @MichaelLo-i5v День тому +2

    I would like to ask, in the ray.so snapshot app, doesn’t the URL have a maximum length?
    If the number of codes is large today, wouldn't it cause bugs?
    Is there anything wrong with my understanding?
    Or did he actually use other techniques to solve it?

    • @harshitpant07
      @harshitpant07 День тому +1

      2 things
      - either they have set a limit to the amount of characters you can insert
      - they hash it or reduce the size (less possibility)

  • @basheerridwanmuhammad6612
    @basheerridwanmuhammad6612 День тому

    This feature is already in RemixJS

  • @debarkamondal6406
    @debarkamondal6406 День тому +1

    I don't understand why is this a library? Should be pretty easy to push things into the URL. On load pull in the the query params and push it to local or global state. For updating write a simple function that pushes the data to both the URL and the state. Why install yet another library for that simple task? I would keep a single source or truth by default and do this sycing only when needed. I don't use anything like redux unless absolutely required. What do you think? I would love your opnion.

    • @akashambrose
      @akashambrose День тому +1

      Exactly what I thought.

    • @paw565
      @paw565 18 годин тому

      Benefit of having a library like that is the biggest when you work in a team imo. You get ready set of tools, which is documented. It's easier for collaboration and for newcomers into the project. When you work solo simple util function might enough.

    • @debarkamondal6406
      @debarkamondal6406 13 годин тому

      I don't think syncing a state variable with URL is that hard. Its just 2 liner. Unless this library does anything more than that

    • @paw565
      @paw565 6 годин тому

      @@debarkamondal6406 it gives you typesafety, you can with ease put entire object state into the url.

  • @nklpn
    @nklpn День тому

    are those the new starlight airpods? looks great!

  • @The.Meshhh
    @The.Meshhh День тому

    Wondering what tthe example Use -Cases for this might be

  • @tomcat1112k
    @tomcat1112k День тому

    YO! subscribed

  • @ChiefORZ92
    @ChiefORZ92 День тому

    I used it two weeks ago on a project, problem is when you try to update multiple values at the same time you will get a race condition and a unsaved state unfortunately...

    • @franky47
      @franky47 День тому

      Would you mind opening an issue for this please? repo is 47ng/nuqs.

  • @curiousprogrammer90
    @curiousprogrammer90 День тому +1

    How this works under the hood though? Does it do router.replace for every change?

    • @franky47
      @franky47 День тому +2

      It depends on the framework (Next.js, Remix, React Router & plain React are supported). In Next.js, it's a client-side update by default (shallow: true, using the History API), but you can opt-in to notify the server for SSR using `shallow: false`, which does call the router.

    • @paw565
      @paw565 18 годин тому

      ​@@franky47bro you are legend. You have created this awesome library and now you are actively answering questions. Cheers!

  • @Noam-Bahar
    @Noam-Bahar День тому +1

    The package is called nuqs

  • @lingarajsahoo3583
    @lingarajsahoo3583 День тому +1

    cool

  • @bioburden
    @bioburden День тому +1

    Could be nice to pair with React Query too

    • @franky47
      @franky47 День тому

      It is! And TanStack Table too.

  • @faktensprecher9132
    @faktensprecher9132 День тому

    Can someone explain the difference between useQueryState from nuqs and just using params?

    • @paw565
      @paw565 18 годин тому

      Type safety and ease of use

  • @umardev500
    @umardev500 День тому

    You can't do that always. That URL bar has limited character long

  • @dejoma.
    @dejoma. День тому +1

    Bruhhhh I literally coded this myself just a month ago 😂 all that for nothing ahaha even the transition and helper functions “parseIntPrUndefined” kinda things.

  • @siya.abc123
    @siya.abc123 День тому +6

    Yo!
    If it changes the url in real time on input, you're gonna need to debounce that!

    • @dangray5809
      @dangray5809 День тому

      Good call!

    • @franky47
      @franky47 День тому +2

      Debounce support (to do one eventual update of the URL) is on the roadmap. Configurable throttle can give you something similar, though you get one initial update (eg: one character for text inputs) then regular batches, which may or may not work for some states.

    • @anmastery
      @anmastery День тому

      @@franky47 Waiting for the debounce support frank

  • @cant_sleeeep
    @cant_sleeeep День тому +1

    just use react query button

  • @Gohealt
    @Gohealt День тому +5

    It’s 2024 and we are still seeing state management in react? Jesus!!

  • @parakhjain6077
    @parakhjain6077 20 годин тому

    Comment your this kind of mind blowing libraries..

  • @tuankietyts
    @tuankietyts День тому

    I wake up everyday and 1 million of javascript libraries being f*cked

  • @itsaysthat2502
    @itsaysthat2502 День тому

    Yo sir
    Make a video on how u started coding from zero and how u got the job.
    And btw don't ignore my comment. Else I'll share your details with fbi

  • @akoladebode-ajayi327
    @akoladebode-ajayi327 День тому +1

    Wow

  • @akoladebode-ajayi327
    @akoladebode-ajayi327 День тому +1

    Gid bless you sir😊

  • @DJDrewDub
    @DJDrewDub 15 хвилин тому

    Neat idea but not practical for real use since urls have fairly short limits, even at base 64 a moderately complex form would overflow that limit. That and imagine sharing a url via email and the link is a giant block of code you have to scroll the page to see.

  • @NilotpaulNandi
    @NilotpaulNandi День тому +1

    Doesn't help much to add an extra dependency, btw react router already has similar kinda hook.

    • @PraiseYeezus
      @PraiseYeezus День тому +2

      so can you write your own code to handle client routing? and all of the edge cases between browsers? and keep it performant? and would it be as battle tested as nuqs?

    • @kamehameha38
      @kamehameha38 День тому

      It's just setting search params bro, chill out@@PraiseYeezus

    • @franky47
      @franky47 День тому +1

      @@PraiseYeezus And type-safe! Type-safety is 50% of the reason behind this package, the other half is the throttling
      mechanism to keep it working when browsers rate-limit history updates.

  • @teenspirit8714
    @teenspirit8714 День тому

    someone tell him about preact signals, with can be used in react

  • @salihyil2
    @salihyil2 День тому +1

    npm i nuqs

  • @gffilm
    @gffilm 20 годин тому

    I would not recommend this approach for a prod app. Security is a big issue here, also many ways of retaining data without using URL params.

  • @adamtang5148
    @adamtang5148 14 годин тому

    What the...

  • @AbouAnia
    @AbouAnia День тому

    Php again

  • @Skorupa9
    @Skorupa9 День тому

    Really? xD Like you can't just create few lines hook for that? xD

  • @DanZ-fq2qs
    @DanZ-fq2qs День тому

    try this? NO

  • @AbhiShake-pl3cf
    @AbhiShake-pl3cf День тому

    Misleading title..

    • @AbhiShake-pl3cf
      @AbhiShake-pl3cf День тому +1

      Sorry, im stupid. They do have parseAsJson and parseAsArrayOf. And i loved their adapters usage

    • @franky47
      @franky47 День тому +1

      @@AbhiShake-pl3cf You can create your own parsers too, JSON is good to start but looks ugly in the URL. Kind reminder that URLs are the first UI your users will see, even before hitting your server. Better make them look nice.

    • @AbhiShake-pl3cf
      @AbhiShake-pl3cf День тому

      @franky47 most browsers hide search params so i wouldnt mind. Objects look ugly when shared but base64 representation looks fine to me

    • @AbhiShake-pl3cf
      @AbhiShake-pl3cf День тому +1

      @@franky47 woah i cant believe the author reads these comments. I agree that it looks ugly (most browsers hide query params from url but its there when shared). How slow would converting them to b64 for url param and backconverting in every setState call be?

    • @franky47
      @franky47 День тому

      If you do this in a custom parser, it would be optimised: the serialise/parse functions are only called when there are actual changes. Couple that with throttleMs to reduce the update rate of the URL. For larger payloads, you could even throw compression + encoding in the mix.

  • @Nishitbaria
    @Nishitbaria День тому

    3

  • @devlala4365
    @devlala4365 День тому

    1

  • @raves_r3177
    @raves_r3177 День тому

    or just use tanstack router

    • @paw565
      @paw565 18 годин тому

      Not in next js bro

  • @joostschuur
    @joostschuur День тому +8

    It's 'nuqs' BTW. Pretty frustrating to not mention the npm package name anywhere in the video description.

    • @dqrk0
      @dqrk0 День тому +2

      1:10

    • @harshitpant07
      @harshitpant07 День тому +4

      He literally spell it at 1:30

    • @PraiseYeezus
      @PraiseYeezus День тому +2

      the internet really is full of bots. no one reads, no one actually watches content, they just comment. incredible.

    • @benjaspet
      @benjaspet День тому +1

      Posting this comment without actually watching a minute and a half into the video is wild!

  • @EmmaLovesCoding
    @EmmaLovesCoding День тому

    6

  • @prashlovessamosa
    @prashlovessamosa День тому

    2

  • @akoladebode-ajayi327
    @akoladebode-ajayi327 День тому +1

    React came as a happy framework but with many problems and now we are using hundreds of external libraries to fix React 😅

  • @DawordGate
    @DawordGate 23 години тому

    Doing this yourself is literally a 10 minutes job
    What's the point 😅

  • @ts8960
    @ts8960 День тому

    who the hell needs state management? keep your app simple ffs. Developers always overcomplicating things

    • @unknownguywholovespizza
      @unknownguywholovespizza День тому

      When app shares state between components, you'll need a way to manage state efficiently. That's why.
      But yeah for most projects, it's unnecessary.

  • @guillemgarcia3630
    @guillemgarcia3630 День тому

    so, a wrapper around window.history.replaceState?

  • @afolabidamilare8756
    @afolabidamilare8756 День тому +1

    Wow