React vocab explained: What is Concurrent React?

Ойын-сауық

The vocabulary surrounding React can be confusing at times, so let's break down some the biggest ideas around building UIs with React, and learn how they relate to Concurrent rendering in React 18.
- 0:00 - Intro
- 0:29 - Render phase
- 1:28 - Commit phase
- 2:10 - State
- 3:12 - Side effects
- 4:02 - Purity
- 5:56 - Idempotence
- 8:23 - Heuristics
- 9:56 - Concurrency
- 14:17 - Strict mode
Links:
- The Rules of React: gist.github.com/sebmarkbage/7...
- Reconciliation: reactjs.org/docs/reconciliati...
- Strict mode: reactjs.org/docs/strict-mode....
- React 18 Release Blog Post: reactjs.org/blog/2022/03/29/r...
- Dan Abramov’s talk on Async Rendering: • Dan Abramov: Beyond Re...

Пікірлер: 33

  • @notshbn
    @notshbn2 жыл бұрын

    Sam, this is one of the best explanations of react vocab that I've seen or read yet. Thank you! Can't wait to see what's next

  • @michaelanthony4750
    @michaelanthony47508 ай бұрын

    Gold descriptions man. Thanks a lot.

  • @Chavez3d
    @Chavez3d2 жыл бұрын

    This should be mandatory viewing for react developers

  • @matthewslyh4052
    @matthewslyh4052 Жыл бұрын

    Nice explanation! You have a new subscriber!

  • @VidozMusic
    @VidozMusic2 жыл бұрын

    Love the explanation - thanks, Sam!

  • @tarunsukhu2614
    @tarunsukhu26142 жыл бұрын

    I have watched this a couple of times now . Thank you for the detailed explanation as well as the links. This is a gem !

  • @tyu3456
    @tyu34562 жыл бұрын

    This was an awesome and clear explanation. Thanks Sam!

  • @FishTalkFish
    @FishTalkFish2 жыл бұрын

    As a frontend engineer, I always love your videos, Sam! Great job on this one!

  • @Triyanox
    @Triyanox2 жыл бұрын

    Great content and very rich explanation !!!

  • @Afrobaritonian
    @Afrobaritonian2 жыл бұрын

    This was really great!

  • @alastairtheduke
    @alastairtheduke9 ай бұрын

    Such a clear explanation, thank you!

  • @EvertJunior
    @EvertJunior2 жыл бұрын

    You're amazing! Thank you for the great content

  • @selftaughtcodelab
    @selftaughtcodelab Жыл бұрын

    Now I understand concurrent . Thanks for detail explanation

  • @FaridShokri
    @FaridShokri2 жыл бұрын

    Awesome video, Thanks a lot

  • @nidhinsnair
    @nidhinsnair9 ай бұрын

    Explained very well. Thank you Sam

  • @jimbin93
    @jimbin93 Жыл бұрын

    Love your video. Best React 18 explanation for sure.

  • @mmmike3426
    @mmmike34262 жыл бұрын

    I made it this far 👏🏻 Would totally listen again!

  • @iNTERO1337
    @iNTERO13372 жыл бұрын

    Such a beast of a man. You let me grasp so much React knowledge in such a concise form,.

  • @tomino133
    @tomino1332 жыл бұрын

    Great video. Also your podcast is amazing. Thanks for doing this man.

  • @mastan419
    @mastan4192 жыл бұрын

    Very well explained.. Thanks

  • @motr3bam867
    @motr3bam8672 жыл бұрын

    He deserves way more subscribers and views. Thanks for your effort man

  • @ChrisAthanas
    @ChrisAthanas2 жыл бұрын

    Great explanation of complex and confusing topics

  • @zomars
    @zomars2 жыл бұрын

    Been a fan since miragejs

  • @rfmiotto
    @rfmiotto2 жыл бұрын

    Nice video, Sam! I loved the example you gave on how to prepare a modal (or page) in the background. It would be really nice to see how to implement this. Do you think this is something you can do with existing APIs or is it still a concept that will be available in the near future (the offscreen component you mentioned)?

  • @samselikoff

    @samselikoff

    2 жыл бұрын

    Thank you so glad you liked it! is something the react team has mentioned they’re working on but it’s not ready yet. Definitely would love to make a video on it once it drops!

  • @modex98
    @modex98 Жыл бұрын

    if you don't subscribe you missed everything up)) thanks

  • @itakpeemmanuel5863
    @itakpeemmanuel5863 Жыл бұрын

    There's been some discourse lately against useEffect for external side effects, where then do we do this side effects? Custom hooks?

  • @rfmiotto
    @rfmiotto2 жыл бұрын

    Dear Sam, I was musing about the purity of the functional component in cases where we want to display a timestamp for example (not like a clock, where you have a setInterval, but simply the time you entered the page). To illustrate, say we have a `const [time, setTime] = useState(new Date());` inside a given component. Because we are calling `new Date()`, the component will not be pure. That is something I found myself doing many times and never though about problems with it since the code worked just fine. But now, your video made me think: what would be the implications of using an impure component like this with the concurrent mode? I imagine that once the render phase starts, the timestamp will be evaluated. But as the commit can be interrupted, the timestamp that will eventually appear on the screen can be deferred. Would that be correct? So, from now on, I will police myself to to handle situations like this in a better way. Maybe using an undefined initial state and then set the state inside the useEffect hook... Thanks!

  • @samselikoff

    @samselikoff

    2 жыл бұрын

    Great question! While it's true you may have not noticed bugs in your app today, it's possible you will in the future once you start adopting new concurrent features like Suspense and Transitions. This is why the React team has started urging all of us to learn more about purity and to make sure our components are pure. In your example, if you call new Date() just to render "You visited this page at 10:24am", you could actually still run into a problem: what if you render it on the server? Maybe the server's new Date() is 10:24:01 and then the client app is 10:24:02. So you have a mismatch. Now again, this might not cause a visible bug in your current app (though you might get a mismatch hydration error in your console), but conceptually, you can see that React actually doesn't have all the information it needs to be able to rerender your app consistently. Usually in these situations there's actually more business logic that is missing from your calculations. In your example, you want to display the time when the user first visited the page. So, "the user first visiting the page" is the part of the logic that's missing. It's implicitly assumed by "new Date()", but it would be better to encode it inside the actual component. So, you might solve this by using some state, or even a ref, to say, "the user just visited the page." Something like hasVisitedPage = useRef(). Now once the component successfully renders, perhaps inside of a useEffect, you can capture that time and store it in state. And now no matter how many times React needs to re-render your app or prepare it offscreen, it has that data. So you can see the time the component was rendered could be thought of as a side effect of rendering, which is exactly why it should go inside of useEffect. And now the component is pure and your app will always be consistent. That's me just kind of thinking out loud but in all of these situations I've run into in the past, it's usually the way to think about it. There's some piece of business logic that's missing from the code, and making that logic explicit rather than relying on it implicitly, improves the component and removes the impurities. Hope that helps!

  • @Gol_D_Roger_The_Pirate_King
    @Gol_D_Roger_The_Pirate_King2 жыл бұрын

    React is still catching up to Rich Harris performance breakdown. React is so slow and yet so many devs are still using it because it is popular and companies still hiring react devs. The best feature of React is "Hireability".

  • @tanveerhasan2382

    @tanveerhasan2382

    8 ай бұрын

    Sad

  • @claus4tw
    @claus4tw2 жыл бұрын

    Is the echo in your voice artificial? I find a bit too much. Nice content though!

  • @samselikoff

    @samselikoff

    2 жыл бұрын

    No, audio is hard + I'm still learning 😩 I think it's just the reverb from the room

Келесі