Preventing React re-renders with composition

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

КОМЕНТАРІ • 139

  • @jazzyBassBenny
    @jazzyBassBenny 18 днів тому +1

    the content/explanation of the concepts should be on the site "thinking in react".
    honestly, this video lets me write my whole app new for performance reasons. great job!

  • @downtown_coffee
    @downtown_coffee Рік тому +35

    Nadia you're an underrated content creator! You break down concepts clearly both on your blog and here. Am going to dive deeper into all your other articles.

  • @melon5063
    @melon5063 Рік тому +8

    I never write comments, but this one deserves huge credit for great explanation

  • @alifiasyalsabila3001
    @alifiasyalsabila3001 3 місяці тому +5

    Preventing React re-renders with composition
    1. Moving state down 1:48
    2. Components as children props 4:37
    3. Components as props 7:58

  • @0xlodz
    @0xlodz Рік тому +6

    Great perf patterns! I will now think about "Isolate state changes" when adding state to a component! It helps to use more composition and test components more easily.

  • @zksumon847
    @zksumon847 Рік тому +5

    Here after reading your blog.

  • @thierryrenematos
    @thierryrenematos Рік тому +1

    omg, your videos about react are so didactic that they took away my anxiety of not being able to deal with performance problems, thank you!!

  • @syahrulanuar4521
    @syahrulanuar4521 Рік тому +3

    Enjoying these new patterns of writing. A lot better than other UA-camrs out there suggesting to just 'deal' with the re-renders... Thanks so much for these! 🤙🏾🤙🏾🙏🏽🙏🏽

  • @kdev_007
    @kdev_007 Рік тому +1

    last week I discovered your blogs and now the vids. Amazing stuffs. I'm building a crypto exchange UI with React and your blogs are helping me a lot. Thank you very much. Keep sharing knowledge.

  • @janasheehan
    @janasheehan 8 місяців тому

    talk about boiling things down and getting to the point. thank you for this. amazing.

  • @SarShaGaming
    @SarShaGaming 10 місяців тому

    This is probably the best video about why and how composition reduce re-renders. great stuff!

  • @OmarGhostt
    @OmarGhostt 3 місяці тому

    I read your book, and I truly thank you. Your expertise is incredible. Thanks for sharing all that knowledge.

  • @toyurc
    @toyurc Рік тому

    Watching these videos after reading those long blog posts cements many of the ideas Nadia always talks about. Thank you so much for sharing🙏

  • @marouaniAymen
    @marouaniAymen Рік тому +1

    Thanks for the video, I encountered the first problem with modal (your first example) in a real world project with Material UI modals. The modal component accepts a prop "open" to show it, at first I saw that with a naive approach (useState + modal inside the parent) I'll trigger a re-render on the parent, so first solution, I opted to useRef + forwardRef and I extracted modals as reusable components, then I used a Redux store to save a key+open and dispatch an open/close modal action from the parent with the modal id as key, the modal will have its own id as key and a call to useSelector to see if it's open or not. In fact, extracting as shown in your video was not a solution to make the parent component easy to read.

  • @shivshankarshejwal6728
    @shivshankarshejwal6728 Рік тому +1

    Absolutely loved the presentation and example. We know these but using this on the fly and for keeping these concepts in mind , such examples really help. Thanks

  • @Bukosaure
    @Bukosaure Рік тому +2

    Love your way of teaching. Very clear and organized. And sweet animations!

  • @B-Amir
    @B-Amir Рік тому +1

    I'm really enjoying your React tutorials! Your explanations are clear and concise, and I'm learning a lot.

  • @devware5609
    @devware5609 Рік тому +1

    Wow amazing explanation, I'm going to use this good practice from now on, just to mention all the content I have found out there just tells you to use Memoization but you track the main problem and offer the best solution, Thanks for it and Greetings from Mexico

  • @21agdmnm
    @21agdmnm 5 місяців тому

    Bought your book after watching some of your videos, you explain so well!

  • @NosherwanGhazanfar
    @NosherwanGhazanfar Рік тому

    Simple and informative performance patterns.

  • @js-wtf
    @js-wtf Рік тому

    Your content is a treasure, I have read again and again and again your blog, and I have learned a crazy amount of stubs. Thanks a lot!!!

  • @gaddp
    @gaddp Рік тому

    oh wow, this video is pretty new.
    explained beautifully and clearly as well. made me re-think everything I have done so far. thank you so much!

  • @albertdugba
    @albertdugba Рік тому +1

    Very educative. Keep them coming in

  • @matt112fly
    @matt112fly 3 місяці тому

    hey nadia, thanks for creating this video.. very straight forward and understandable !

  • @matthewbriggs9414
    @matthewbriggs9414 Рік тому

    Cheers! Really helpful to have these fundamental patterns explained in one place and so concisely.

  • @Javascriptallabout-ss9my
    @Javascriptallabout-ss9my Рік тому

    Simple and very clear explanation 👌

  • @martinnieva8484
    @martinnieva8484 11 місяців тому

    Thank you VERY much Nadia Makarevich, I was missing some fundamentals on this and your article (and maybe this video is as useful) helped a LOT. It was so clear. Maybe I should have read the official docs from the very beginning I started using React hahaha

  • @LucasFariaDev
    @LucasFariaDev Рік тому

    Nadia, your content is incredible and I'm glad I found you! I already bought your book and have been enjoying it a lot. Love the way you teach, please keep it up

  • @pranayahirwar
    @pranayahirwar 4 місяці тому +2

    I really really like your explanation, the time you have put in to make these videos and the cat sticker, it's really cute specially the cat with crown. Wishing you success in getting what you desire.

  • @mleger45
    @mleger45 6 місяців тому

    this content is gold! thanks for such a great detailed explanation on how to properly handle states!

  • @davidasiamah2898
    @davidasiamah2898 Рік тому

    This was quite enlightening as it was refreshing. I think I've leveled up my React Skills in this video. I just subscribed.

  • @alexodan
    @alexodan Рік тому +1

    this series are making me realize I've been writing some terrible things lol, nice work keep it up!! 🙌

  • @nicholaschu203
    @nicholaschu203 7 місяців тому

    Love your content! Very clear presentation and absolutely amazing! Thank you for your sharing!

  • @jasondilao6172
    @jasondilao6172 Рік тому

    Thank you very much Nadia. Very insightful!!

  • @sumeetprajapati15
    @sumeetprajapati15 Рік тому +1

    Great video, very helpful. Thanks for sharing!

  • @dylpckl
    @dylpckl Рік тому +1

    very clear and concise

  • @gedas7529
    @gedas7529 Рік тому

    Very well explained and concise thank you !!

  • @gautamadhikari2590
    @gautamadhikari2590 Рік тому

    I just discovered this channel and the content quality is so good. Love your videos :)

  • @thebarnowlsmusic
    @thebarnowlsmusic Рік тому

    Valuable gems, thanks for putting this video and your articles together. Learned some valuable info.

  • @katsunoi
    @katsunoi Рік тому

    this is a great video - useful, practical, and well-explained

  • @PaweTkocz
    @PaweTkocz Рік тому

    Great video, just keep going. Your material are great source of knowledge both YT and Your website.

  • @akashbhadouria6727
    @akashbhadouria6727 9 місяців тому

    wow, you are awesome. One of the best content creators, God gifted explanation skills.

  • @dianaduran159
    @dianaduran159 5 місяців тому

    You explain so well, love it 😅

  • @mohanant7557
    @mohanant7557 Рік тому

    Please provide more videos in any topic on react 🙂Your content is awesome and practical

  • @notcountdankula
    @notcountdankula 4 місяці тому

    Wow. So grateful for this video. 🙏

  • @MundiWay
    @MundiWay 10 місяців тому

    WOw, best way to explain with editing, Keep going on.

  • @EnriqueMartinezInter
    @EnriqueMartinezInter Рік тому

    This is just what I needed, thank you so much!!

  • @TheInfamousAlpha
    @TheInfamousAlpha Рік тому

    Packed full of valuable content ❤

  • @ka5539
    @ka5539 6 місяців тому

    This was very useful. Thank you!

  • @jegadheeswarank6290
    @jegadheeswarank6290 7 місяців тому

    Great explanation!. You earned a subscriber. I hope your channel experiences steady growth

  • @haallefs
    @haallefs 6 місяців тому

    This content is pure gold

  • @skchintu6172
    @skchintu6172 5 місяців тому

    wonder full tutorial mam, i loved your explanation 💌

  • @JoyceLu-d9g
    @JoyceLu-d9g 7 місяців тому

    Thanks so much!!! for your great explanation!

  • @mayurkukade8902
    @mayurkukade8902 Рік тому

    Thanks for creating such a great video .. From your article, I came here.. Could you please include a separate tab for react hooks in your article .. This would be very helpful to me and other developers.

  • @GokuHindustani
    @GokuHindustani 9 місяців тому

    you are really underated creator

  • @SoulmatesLive
    @SoulmatesLive 2 місяці тому

    Thank you for this amazing video! 🙏🏻🙏🏻

  • @wanted70a
    @wanted70a Рік тому +1

    Great work and thx! One questio if I may?
    Example with scroll tracking?
    Is that compontent usefull? How would we fire a callback or some logic without re-render?
    Updating the state in the wrapper is not usefull for itself, ins't it?

    • @developerwaypatterns
      @developerwaypatterns  Рік тому

      That really depends on what you want to do with that logic, hard to answer without seeing a real-life usecase or code. There are multiple options here, like throttling or exposing that state through render props (if some external component needs access to it without being re-rendered)

  • @eddi3ms
    @eddi3ms Рік тому

    great video. It really helped! Thank you

  • @satejbidvai
    @satejbidvai Рік тому

    Very very helpful! Thanks!

  • @SulaymonOlimov-t7h
    @SulaymonOlimov-t7h 13 днів тому

    amazing explanation

  • @amirdiafi
    @amirdiafi Рік тому

    Thanks, Also we can work in such an MVVM architecture and manage the states on the presenter/controller and consume it in variant components.

  • @nallaparajuamareshvarma8471

    great content please make more videos

  • @K.Huynh.
    @K.Huynh. 4 місяці тому

    so cool, thank you for sharing!

  • @alexandrbalashov7543
    @alexandrbalashov7543 Рік тому

    Good job! Thanks to the author a lot!

  • @trollflix
    @trollflix Рік тому

    you are so amazing, this video helped me so much

  • @alexandreagra239
    @alexandreagra239 5 місяців тому

    This is very amazing. Thank you so much, big W !!!

  • @kwaku_2023
    @kwaku_2023 6 місяців тому

    Awesome 🎉 this is super crazy and valuable at the same!!

  • @mrstudioguitar2808
    @mrstudioguitar2808 Рік тому

    Great video! Thanks!

  • @NoudvD63
    @NoudvD63 Рік тому

    Great! Very useful info.

  • @sarcasticdna
    @sarcasticdna Рік тому +1

    Golden content

  • @ivanslepchenko9785
    @ivanslepchenko9785 Рік тому

    Thanks! This is awesome!

  • @aomafura3374
    @aomafura3374 14 днів тому

    Thanks! I had so much trouble with re-renders. Can you cover Form re-renders as well?

    • @developerwaypatterns
      @developerwaypatterns  14 днів тому

      Do you have anything specific in mind for this?

    • @aomafura3374
      @aomafura3374 14 днів тому

      @ I’m probably doing mu form wrong but basically the scenario is, every time I input in my input text field, the entire screen re-renders.
      My form is inside a Modal but idk if that matters.

    • @developerwaypatterns
      @developerwaypatterns  13 днів тому

      You just need to trace where you're changing the state - in forms it's no different from other components.

  • @fanpeter-z3c
    @fanpeter-z3c Рік тому

    awesome video, thanks for the advice to avoid caveats

  • @AlexStefan-vs2dj
    @AlexStefan-vs2dj Рік тому +1

    Thank you so much for explaining these concepts, one question though: passing many components as props at multiple levels wouldn't make it look terrible at the top level? Like some pyramid of code that mabey makes you scroll-x in your code editor to fully see?

    • @developerwaypatterns
      @developerwaypatterns  Рік тому

      It might! 🙂 No silver bullet for anything. Those are just techniques that are useful for certain cases, but over-use of them might result in unreadable code that doesn't make sense

  • @haroongit
    @haroongit 16 днів тому

    thanks u @developer way

  • @talatkuyuk6556
    @talatkuyuk6556 3 місяці тому

    Nice video, I actually wonder how you make this video with which tools?

  • @sushantrajbanshi4508
    @sushantrajbanshi4508 Рік тому +1

    Is there any optimization difference between Component as a children and Component as a prop pattern ? I found both of them to be quite similar in terms of efficiency, as in both the cases the children or the props don't get re-rendered on state updates ? Lovely video BTW 💛

    • @developerwaypatterns
      @developerwaypatterns  Рік тому +1

      No difference that I know of, children are props, just have nicer jsx "nesting" syntax :)

    • @sushantrajbanshi4508
      @sushantrajbanshi4508 Рік тому +1

      @@developerwaypatterns That's what I thought too :)

  • @igor5379
    @igor5379 Рік тому +1

    brilliant!

  • @Piyush-gt3wf
    @Piyush-gt3wf Рік тому

    Wow, you're amazing!

  • @danilocecilia7831
    @danilocecilia7831 Рік тому

    Loved this video! I didn't know props didn't affect changes on the state, thanks so much for going through all possible scenarios we can use in order to avoid unnecessary re-render!
    Can you also explain on the case where I can useSelector for example:
    const { trainingMode } = useSelector((state) => state);
    const { checkedIn } = useSelector((state) => state.checkin);
    Is there any implications on using only state or state.somethingElse when it comes to re-render?

    • @developerwaypatterns
      @developerwaypatterns  Рік тому

      `useSelector` I assume is something like `reselect` library? Of normal state or React Context it won't matter, re-renders will be triggered at the fact that the state/Context value changes.
      If you're using Redux or other library, I would need to double check how it behaves, depends on the library

  • @Ratelchief
    @Ratelchief Рік тому

    this is brilliant!

  • @jguix
    @jguix Рік тому

    great content! thanks

  • @gabrielalvescunha9405
    @gabrielalvescunha9405 Рік тому

    This is gold 🪙🪙🪙🥇

  • @filipecolaquecez9053
    @filipecolaquecez9053 Рік тому +1

    great video :)

  • @haroongit
    @haroongit 16 днів тому

    now i am realising why my react project was slow my manger asked me why slow project

  • @MisterPitou
    @MisterPitou 9 місяців тому

    very nice, thank you

  • @morchellemusic2829
    @morchellemusic2829 10 місяців тому

    thanks Nadia

  • @ivaylopetrov9956
    @ivaylopetrov9956 Рік тому

    Great job

  • @MrEnsiferum77
    @MrEnsiferum77 Рік тому

    I've jump to codebase that written the code like that at 10:50, and the code is mess and re-rendering like crazy... there is not good way to stop re-rendering in react, unless to slowly started switching to solidjs.

  • @PontusHultman
    @PontusHultman Рік тому

    Great video!
    How would you go about the ButtonWithDialog example if the component had a datagrid in it, and when clicking an item we want to open up the by passing an id.
    Then it feels like we need to have [id, setId] inside of the component which forces it to rerender?
    const Component = () => {
    const [id, setId] = useState(0)
    const [open, setOpen] = useState(false)
    const handleItemClick = (id: number) => (
    setId(id)
    setOpen(true)
    }
    return (

    {open &&
    }

    • @developerwaypatterns
      @developerwaypatterns  Рік тому

      Yeah, in this case Datagrid will re-render. If it's something you need to prevent, you'd have to either go with React.memo for it, or pass that id through Context/any state management solutions you use

  • @darindaxd
    @darindaxd Рік тому

    Amazing stuff..

  • @shahryartavakkoli
    @shahryartavakkoli Рік тому

    Thank you, I have a question, how can find our components are re-rendered or not? Create a useEffect on them without second entry? What is your way to test and debug when you have no request to an API

    • @developerwaypatterns
      @developerwaypatterns  Рік тому +1

      This will work. Also, just console.log in render function will be good for it most of the time.
      And a lot of people like this tool for this: github.com/welldone-software/why-did-you-render

    • @shahryartavakkoli
      @shahryartavakkoli Рік тому

      @@developerwaypatterns 🌹♥

  • @hmatpin
    @hmatpin Рік тому

    How would you go about preventing rerenders in list generated with Array.map? If the list is passed as a children prop, you end up in a scenario where a prop depends on another prop, ie, , and you can't pass props to props.children in the render code. Nice videos. Thanks

  • @elik3765
    @elik3765 Рік тому

    ragarding the last example with column and content. What would you say if Layout still wraps children, and and inside the Layout they are accessed via array destructuring, const [column, content] = children, and then used at appropriate places? I don't see any benefits over 'components as chidren', just wandering if that could be an alternative

    • @developerwaypatterns
      @developerwaypatterns  Рік тому

      For me, that would be confusing - I would understand what the intention is I'd say, but it would take a few seconds from my mental capacity to figure it out. So I'd rather go with some more "traditional" approach.
      From performance/re-renders perspective it doesn't look like it would bring any benefit either 🤔

  • @4BeerLife
    @4BeerLife Рік тому

    Thx a lot!

  • @michaelscofield2469
    @michaelscofield2469 Рік тому

    omg

  • @KO-lm6wh
    @KO-lm6wh Рік тому

    keep up your work

  • @aissanadjemeddine1330
    @aissanadjemeddine1330 Рік тому

    Thanks ❤❤❤

  • @marketkombat
    @marketkombat Рік тому

    Interesting content

  • @haroongit
    @haroongit 16 днів тому

    omg its amazing a diamond video thank u thank u thank u