Preventing React re-renders with composition

Sdílet
Vložit
  • čas přidán 11. 01. 2023
  • 👉 Advanced React Book: www.advanced-react.com
    👉 Comprehensive guide on React re-renders (www.developerway.com/posts/re...)
    👉 How to useMemo and useCallback: you can remove most of them (www.developerway.com/posts/ho...)
    👉 The mystery of React Element, children, parents and re-renders (www.developerway.com/posts/re...)
    💬 Twitter: / adevnadia
    💬 Linkedin: / adevnadia
    Looking into how re-renders of React components can be prevented with the help of three composition patterns.
    #react #reactjs #webdevelopment #programming #frontend

Komentáře • 121

  • @downtown_coffee
    @downtown_coffee Před rokem +26

    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.

  • @pranayahirwar
    @pranayahirwar Před 12 dny +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.

  • @0xlodz
    @0xlodz Před rokem +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.

  • @matthewbriggs9414
    @matthewbriggs9414 Před rokem

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

  • @thierryrenematos
    @thierryrenematos Před rokem +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!!

  • @EnriqueMartinezInter
    @EnriqueMartinezInter Před rokem

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

  • @gautamadhikari2590
    @gautamadhikari2590 Před 10 měsíci

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

  • @thebarnowlsmusic
    @thebarnowlsmusic Před rokem

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

  • @gedas7529
    @gedas7529 Před rokem

    Very well explained and concise thank you !!

  • @syahrulanuar4521
    @syahrulanuar4521 Před rokem +3

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

  • @Bukosaure
    @Bukosaure Před rokem +2

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

  • @B-Amir
    @B-Amir Před 11 měsíci +1

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

  • @gaddp
    @gaddp Před rokem

    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!

  • @toyurc
    @toyurc Před rokem

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

  • @katsunoi
    @katsunoi Před rokem

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

  • @satejbidvai
    @satejbidvai Před 7 měsíci

    Very very helpful! Thanks!

  • @jasondilao6172
    @jasondilao6172 Před rokem

    Thank you very much Nadia. Very insightful!!

  • @albertdugba
    @albertdugba Před rokem +1

    Very educative. Keep them coming in

  • @21agdmnm
    @21agdmnm Před 26 dny

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

  • @mrstudioguitar2808
    @mrstudioguitar2808 Před rokem

    Great video! Thanks!

  • @sumeetprajapati15
    @sumeetprajapati15 Před rokem +1

    Great video, very helpful. Thanks for sharing!

  • @PaweTkocz
    @PaweTkocz Před rokem

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

  • @shivshankarshejwal6728
    @shivshankarshejwal6728 Před 11 měsíci +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

  • @janasheehan
    @janasheehan Před 3 měsíci

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

  • @dylpckl
    @dylpckl Před 9 měsíci +1

    very clear and concise

  • @ka5539
    @ka5539 Před měsícem

    This was very useful. Thank you!

  • @user-cc2fc4wy7q
    @user-cc2fc4wy7q Před 2 měsíci

    Thanks so much!!! for your great explanation!

  • @alexodan
    @alexodan Před rokem +1

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

  • @SarShaGaming
    @SarShaGaming Před 6 měsíci

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

  • @eddi3ms
    @eddi3ms Před rokem

    great video. It really helped! Thank you

  • @haallefs
    @haallefs Před 2 měsíci

    This content is pure gold

  • @notcountdankula
    @notcountdankula Před 13 dny

    Wow. So grateful for this video. 🙏

  • @Javascriptallabout-ss9my
    @Javascriptallabout-ss9my Před 8 měsíci

    Simple and very clear explanation 👌

  • @trollflix
    @trollflix Před rokem

    you are so amazing, this video helped me so much

  • @ivanslepchenko9785
    @ivanslepchenko9785 Před rokem

    Thanks! This is awesome!

  • @NosherwanGhazanfar
    @NosherwanGhazanfar Před rokem

    Simple and informative performance patterns.

  • @zksumon847
    @zksumon847 Před rokem +5

    Here after reading your blog.

  • @nachowolf4471
    @nachowolf4471 Před rokem

    Great content! Thanks

  • @TheInfamousAlpha
    @TheInfamousAlpha Před rokem

    Packed full of valuable content ❤

  • @dianaduran159
    @dianaduran159 Před 26 dny

    You explain so well, love it 😅

  • @nicholaschu203
    @nicholaschu203 Před 2 měsíci

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

  • @mleger45
    @mleger45 Před 2 měsíci

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

  • @NoudvD63
    @NoudvD63 Před 10 měsíci

    Great! Very useful info.

  • @igor5379
    @igor5379 Před 10 měsíci +1

    brilliant!

  • @martinnieva8484
    @martinnieva8484 Před 7 měsíci

    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

  • @jguix
    @jguix Před rokem

    great content! thanks

  • @MundiWay
    @MundiWay Před 5 měsíci

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

  • @jegadheeswarank6290
    @jegadheeswarank6290 Před 3 měsíci

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

  • @Ratelchief
    @Ratelchief Před rokem

    this is brilliant!

  • @alexandrbalashov7543
    @alexandrbalashov7543 Před rokem

    Good job! Thanks to the author a lot!

  • @hidden_monster007
    @hidden_monster007 Před rokem +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.

  • @alexandreagra239
    @alexandreagra239 Před měsícem

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

  • @kwaku_2023
    @kwaku_2023 Před 2 měsíci

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

  • @Piyush-gt3wf
    @Piyush-gt3wf Před rokem

    Wow, you're amazing!

  • @MisterPitou
    @MisterPitou Před 4 měsíci

    very nice, thank you

  • @4BeerLife
    @4BeerLife Před rokem

    Thx a lot!

  • @LucasFariaDev
    @LucasFariaDev Před 8 měsíci

    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

  • @marouaniAymen
    @marouaniAymen Před rokem +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.

  • @mohanant7557
    @mohanant7557 Před rokem

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

  • @ivaylopetrov9956
    @ivaylopetrov9956 Před 8 měsíci

    Great job

  • @devware5609
    @devware5609 Před rokem +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

  • @akashbhadouria6727
    @akashbhadouria6727 Před 5 měsíci

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

  • @KO-lm6wh
    @KO-lm6wh Před rokem

    keep up your work

  • @js-wtf
    @js-wtf Před 9 měsíci

    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!!!

  • @melon5063
    @melon5063 Před 11 měsíci +6

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

  • @davidasiamah2898
    @davidasiamah2898 Před rokem

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

  • @michaelscofield2469
    @michaelscofield2469 Před rokem

    omg

  • @aissanadjemeddine1330

    Thanks ❤❤❤

  • @darindaxd
    @darindaxd Před rokem

    Amazing stuff..

  • @GokuHindustani
    @GokuHindustani Před 4 měsíci

    you are really underated creator

  • @mayurkukade8902
    @mayurkukade8902 Před rokem

    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.

  • @filipecolaquecez9053
    @filipecolaquecez9053 Před rokem +1

    great video :)

  • @sarcasticdna
    @sarcasticdna Před rokem +1

    Golden content

  • @nallaparajuamareshvarma8471

    great content please make more videos

  • @skchintu6172
    @skchintu6172 Před měsícem

    wonder full tutorial mam, i loved your explanation 💌

  • @amirdiafi
    @amirdiafi Před rokem

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

  • @salmon.hanif9000
    @salmon.hanif9000 Před 3 měsíci

    Awesome video

  • @gabrielalvescunha9405
    @gabrielalvescunha9405 Před 9 měsíci

    This is gold 🪙🪙🪙🥇

  • @morchellemusic2829
    @morchellemusic2829 Před 6 měsíci

    thanks Nadia

  • @market_kombat
    @market_kombat Před rokem

    Interesting content

  • @anaalmeida2327
    @anaalmeida2327 Před 2 měsíci

    wtf great content!!! keep it up

  • @runner4digits
    @runner4digits Před 4 měsíci

    видео просто супер
    Спасибо 💌

  • @user-lw6jt1nt4k
    @user-lw6jt1nt4k Před rokem

    awesome video, thanks for the advice to avoid caveats

  • @kashmirtechtv2948
    @kashmirtechtv2948 Před 7 měsíci

    Great

  • @AlexStefan-vs2dj
    @AlexStefan-vs2dj Před rokem +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  Před rokem

      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

  • @hmatpin
    @hmatpin Před rokem

    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

  • @wanted70a
    @wanted70a Před rokem +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  Před rokem

      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)

  • @danilocecilia7831
    @danilocecilia7831 Před rokem

    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  Před rokem

      `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

  • @elik3765
    @elik3765 Před rokem

    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  Před rokem

      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 🤔

  • @user-jg6vc6po6b
    @user-jg6vc6po6b Před 7 měsíci

  • @sushantrajbanshi4508
    @sushantrajbanshi4508 Před rokem +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  Před rokem +1

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

    • @sushantrajbanshi4508
      @sushantrajbanshi4508 Před rokem +1

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

  • @shahryartavakkoli
    @shahryartavakkoli Před rokem

    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  Před rokem +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 Před rokem

      @@developerwaypatterns 🌹♥

  • @MrEnsiferum77
    @MrEnsiferum77 Před rokem

    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 Před rokem

    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  Před rokem

      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

  • @panosjapan7
    @panosjapan7 Před rokem

    How do you track which components re-render? I'm a newbie and what I would think to do is add a console.log to every file, to see if it's re-rendered (which, I'm sure, is not the best way to do it).

    • @developerwaypatterns
      @developerwaypatterns  Před rokem +2

      You can also use tools like "why-did-you-render": github.com/welldone-software/why-did-you-render

    • @habalgarmin
      @habalgarmin Před rokem

      @@developerwaypatterns хороший инструмент, сам им пользуюсь.

  • @Ginold
    @Ginold Před rokem +1

    I dont get it, you say that if state changes within a component it will make it re-render completely, but then at 7:00 you say that if state changes children are not affected because they are just props, but they should be re-rendered as a whole because of the state change, no?

    • @developerwaypatterns
      @developerwaypatterns  Před rokem +2

      Nope, that's the beauty of passing components as children! If you think of the components as a tree, then when state change triggers a re-render, it will be propagated "down" the tree, not up. And if you pass components as props, they will be "above" in that tree, so they will not be affected.

    • @Antoshkiv1
      @Antoshkiv1 Před 6 měsíci

      @@developerwaypatterns Thanks for this answer!
      I was struggling with this as well and just cant get why it is works like that.
      By the way I bought your books and it is amazing! Thanks a lot for such great and structured content and for the videos as well!

    • @developerwaypatterns
      @developerwaypatterns  Před 6 měsíci

      @@Antoshkiv1 Thank you! 😊

  • @sarcasticdna
    @sarcasticdna Před rokem +2

    One suggestion please try to use dark themes in your video

  • @h3nry_t122
    @h3nry_t122 Před rokem +1

    at around 6:50 I found it really hard to understand.
    so components in the RETURN statement is not the same as {children} ? so there is a differentiation?
    "children are just props" just isn't really a comfortable reason to justify them not re-rendering. they are still components?
    I tried reading your blog posts too but I'm still struggling to understand your explanations.
    this is the explanation:
    “children” is a element that is created in SomeOutsideComponent. When MovingComponent re-renders because of its state change, its props stay the same. Therefore any Element (i.e. definition object) that comes from props won’t be re-created, and therefore re-renders of those components won’t happen.
    how does the props "staying the same" explain the children not re-rendering. I thought props changing does not cause re-renders anyways.
    overall I really like your content but my brain is just finding it such a hard time to understand it.

    • @developerwaypatterns
      @developerwaypatterns  Před rokem +2

      It really is just a matter where the Element is created and where the state is triggered. When we pass elements as props to a component with state, those elements are created in the parent components. Something like this:
      ```
      const App = ({ elemAsProp }) => {
      const [state, setState] = useState();
      // elemAsProp content won't re-render because of setState
      return {elemAsProp}
      }
      ```
      Whatever is passed in `elemAsProp` won't be affected by the state change from `setState` in the `App` - they are higher in the components hierarchy. And when you pass components as `children` - it's exactly the same, they are just props in this case.
      If, however, you create an Element inside the `App`, when state change is triggered and `App` re-renders, every Element declared inside will be re-rendered as well:
      ```
      const App = () => {
      const [state, setState] = useState();
      // this one will re-render when setState is triggered
      const elemInside =
      return {elemInside}
      }
      ```
      It's described in more details here: www.developerway.com/posts/react-elements-children-parents

  • @user-kt7uk9cq7c
    @user-kt7uk9cq7c Před 3 měsíci

    sir, you are madam??