Interviews With Experts Bonus 0 exercises
    interview

    Evan Bacon brings React Server Components to React Native

    Kent sits down with Evan Bacon, creator of Expo Router, to talk about what React 19 and server components mean for native development.

    Evan gave a talk at React Conf 2024 demoing the use of React server components in a native application through a GPT clone. With server components you can use async and suspense like you'd expect in React. He takes the GPT demo to it's limits using the server-driven pattern but having it respond with native widgets like weather or maps.

    They finish the chat talking about how server components allow composing web and native content together much easier with Expo DOM components. These components will let native developers incrementally convert web interfaces to native code in ways you couldn't before.

    Resources

    Loading interview

    Transcript

    00:00 What is up everybody, I'm Kent C Dodds, and this is Evan Bacon say hi Evan. How's it going guys? So good to have you here Evan, so I'm trying to think back where we met I think I don't remember the first time we met it was like years ago first time We met in person was it at react rally, maybe

    00:19 Did you ever go to react rally react rally? No, okay? It must have been a react conf like Maybe 2019 or something in Las Vegas was that the first time my first react conf was that the last one? I feel like oh really It's either. I think maybe the first time we met in person was react, Miami

    00:39 No way like like this year. No. I think it might have been the first or second react, Miami. Okay. It was right. Yeah Yeah, and before that I think we spoke on When your podcast it was like a joint thing it was like you me and Lydia Yes, yeah, that was a first time. I remember

    00:58 Chatting with you, and then yeah, I feel like we had met quite a while ago But yeah, so excited to have you on here for epic react expert interview version 2 And it's just been really cool to follow you and what you're doing with Expo and all of the native react native stuff

    01:20 And so yeah, I would like for folks to get to know you a little bit. Could you give us a intro to yourself? Yeah, of course and again. Thanks so much for having me So yeah, I'm Evan Bacon, I am the manager of dev tools at Expo I

    01:38 Mostly write software all day primarily focused in the open-source space before that I was a contractor at frog design Worked on the series XM radio for a little bit and like some some car stuff and Before that I was a Lego master builder for about like five years Somehow what does that mean?

    02:00 I would build like you know life-size Lego sculptures of like superheroes and take them to things like comic-cons and Whoa? Yeah, like were you paid for that? Yeah? Yeah, it's pretty how cool Reasonable job. Yeah reasonable work

    02:18 Pretty pretty exciting stuff actually I was just moving them out of storage the other day into my house in Texas and Like there were these two guys like moving stuff as well And then they kind of like caught a glimpse of me moving these and then you know I? Low uploaded it, and then I moved up and when I came back. They like brought their kids to come see

    02:38 And then I realized like okay, maybe these shouldn't be in storage I should like take them out like that donate them or something So yeah is good stuff But one thing that just really bugged me about a lot of that like art stuff is that you had to drive somewhere and be There in person to experience. Oh, this was like a long time before things like tick-tock like now I'd probably do it primarily in tick-tock

    02:57 And so something that I really liked about Technology and software was that you could just make something and then infinitely clone it for free and anyone could interact with it or use it And that's actually I think still today the most attractive thing in open source Hmm

    03:12 Yeah, actually really primary driver from being in open sources is that ability to just give things away for free infinitely as I make them So uh-huh well that is super cool. It all it all started with life-sized Lego action figures Yeah, those are the early indicators if you get a kid might be in the open source that they're getting too into the Legos

    03:33 And Legos are often the metaphor for like react and components and stuff too, so man. It's just all over Yeah, yeah, they definitely are I've attempted. I've tried my best to avoid the Lego metaphors when discussing RSC and composition

    03:53 Yeah, you know that that metaphor kind of breaks down a little bit for me because the one of the cool things about RSC Is that you can like swap one thing out or not just RSCs, but like react composition? You can swap one component out for another really easily But if you're like in the middle of a build you want to swap out that Lego break you got to like take everything apart

    04:13 To swap out that Lego like it's not it's not quite the same sort of experience Yeah, yeah, and like like it. You know when you're playing with Legos You spent a lot of time just searching for the right piece Which is you know not the case of the RSC just kind of it's infinitely there you think command is actually really fun

    04:30 You know sometimes like in real life if you're like coding for too long You will mentally be like oh, I could command Z and you'll be like oh wow. I've got a good in the software world Okay, I've got to tell you a quick story when I was a kid. I was Really into video games, and I think at the time. I was playing a lot of Roller coaster tycoon and like Age of Empires also and

    04:53 so I I got in the habit of regularly saving my game and I also had a fish tank that I had a bunch of fish in all the fish died and So I was cleaning it out I think I was going to use it for something else or whatever I was cleaning it out And I was like shaking the little pebble rocks out because they were like stuck in there and as I was shaking it

    05:13 I like squeezed too hard on the top and it broke and the glass like shattered and my my brain just like Automatically went to like ctrl Z or like load save the game like Yeah, I just some such a weird phenomenon Yeah, yeah On the the line of weird phenomenon like I don't know if you feel this way

    05:35 But if I have something in my clipboard like I hit Command X or command see or whatever. I feel like I'm holding something like I have this the same sort of Yeah, yeah, I'm just like holdings until I paste it So it's like I kind of feel this urgency to paste it somewhere, but so I can like free that up in my brain

    05:57 It's so weird. I do that too, but especially if I want to like my voice cracks. I'm so excited Talk about the clipboard if I like I'm trying to copy and paste a lot of things right because I'm worried I'm gonna like over paste or something. I don't know. I just need to get into like having a multiclip order or something

    06:13 Yeah, yeah, I've been using Alfred for a long time, so I shouldn't be like feeling that but I do and It's funny. Okay. Well glad to know it doesn't go away Yeah, but anyway So I I was really amazed at a talk that you gave at react conf this year

    06:35 And I wanted to share a little bit of that with with folks. I hope that people go and watch it if you haven't seen It already Actually, what was the name of the talk so people can find it? Who I think is fetch once render everywhere? I always try to keep things around that right once run everywhere template, so I like that yeah

    06:55 Yeah, yeah, and it very well describes what you did so I I was actually not in the room I was at react conf, but I wasn't in the room. I was I think Preparing my talk I was practicing my talk when you were giving yours But I heard so many good things about your talk that that night late into the evening I was like okay

    07:15 I'm gonna watch Evans talk and it just blew me away And I really wish I'd been in the room at the time because it was Phenomenal and so I want you to give like a summary of what your talk was about and we can talk about some of the finer points Yeah, well first of all super flattering. I mean yeah To hear that from you is incredible so that the talk was

    07:36 basically debuting react server components for react native So it starts out with some background on Expo and the expo framework which is a frame for a native, and then we talked about just how server driven ui is This it kind of like in the upper echelon

    07:54 It's very similar to how react helps you achieve if you like rewind the clock maybe like 10 years or so A lot of the kind of complex Patterns that just the top websites were achieving and how react kind of made that available for everyone Hmm a lot of that exists today in react it just in the native world. I just saw like

    08:13 X the other day like with their Olympics portal They made all that server driven native ui with something which looked kind of like react is basically Word for word the section of my talk where I'm describing how like reddit and lyft and doordash and everyone Make something they make a closed source they make just enough to squeak by because the server driven paradigm that you just get mostly for free on the web is

    08:34 It's one of the hardest things you can do on native And then kind of outline how with react server components. We can we can make this work just everywhere same model You know verbatim so async components suspense transitions the server actions the works And then you know demonstrate a little bit of it

    08:52 Kind of touched on how you could just push this like to the very limits of what's possible so in prep for the talk I just kind of wanted to make whatever the coolest possible app. I could think of was and that was It's kind of dating now, but it was like some version of chat GPT which had

    09:10 ui which you could just generate and like make server driven and So then you could do things like ask for the weather and instead of returning text or markdown You could render like a truly native weather widget or movies widget or a map widget with like fly by you know like

    09:28 Totally native you could like long press it to get more effects And then that could call a server action to render more views and render those back down native views so Imagine like as you're building a truly native app You can think of it almost as like creating new HTML behind the scenes for each one of those elements and then just generating that in the bundler

    09:47 At build time and then you can you know recurse however you want back and forth And so then I just kind of threw a lot of the wall So then he just tried to like really spam like how many different things are possible because the magic here is not just that it's Possible because that is cool on its own But that it's really easy to use once you scale it up and get the framework, right?

    10:08 You know obviously there's still questions around like versioning and getting the platform specifics right because apps can have more like stagnation There's no backwards compatibility if you get all those right, which we plan to do then super easy You can just fly through it like the web, but you know truly limitless Yeah, and somewhere at the end there with a lot of that velocity so

    10:30 Check it out is no more visuals more pictures, and yeah, yeah, it really blew my mind. What? was possible there and Honestly, I'm just really impressed if I mean there were a lot of impressive things and one of the things that was really impressive was

    10:46 The demo itself how much work and energy did you put into that demo because it looked like a lot of work Yeah, so first version of the demo. I mean it's somewhere between like working on the actual framework, and then the demo in parallel so

    11:03 With that very got server actions and some nested server actions cracked an expo then Like having like requesting show me more movies and having that come back Took maybe two hours, and then each card after that probably took somewhere between two to three hours There's maybe like four or five cards, so I think it took about a weekend to write

    11:27 Geez and then well actually it's one more time It's something that's kind of interesting about this I talked about server components in native native developers get very nervous because the servers are so far removed from native with web Kind of it's very you know they're like intrinsically connected with native

    11:42 It's scary, but one thing that actually is really the power of server components is that it abstracts the server away So you you just write like you just fetch data in a function with an ace like you don't really think about the server That much you just think about what's static and what's interactive So the part where I was actually rendering and like fetching JSON

    12:03 Which is generally the hard part in native apps who just went by instantly and I spent the majority of time just styling it Getting the animations just doing like standard front-end development It's kind of a misnomer like if you think about it as being like mostly server driven Yeah, it is interesting. I think that like once

    12:22 You have the framework right then it just comes down to writing components and components are way easier to do than all of the other parts of what we're doing as Web or even native developers of like managing data caches and all of that stuff So the framework really does a lot of heavy lifting for you

    12:42 And then it's the product work gets a lot easier with our sees is that what you'd say Yeah, yeah, definitely Which is a great problem to have I mean I personally more like, you know creative and visual and Want to spend more time focusing on like the gestures and in making things feel right Especially for like the exact platform that you're on

    13:03 And just I don't know. Well, we talked about like right once run everywhere like an expo people are like Some people are kind of like just physically against that Because there are platforms like specificities, but there's a lot of things in the app development process that you do want to be just right once run everywhere and so it's gonna be stuff like

    13:24 Authentication or you know redirects or cookie like code signing really anything related to the deployment process But then all the visuals like what you actually touch and feel with your hand You know that that should all be on the table for you're making for the exact platform that you're like interacting with and so

    13:42 definitely over the last few years and taking out a strong and just like with Expo to just focus on those other parts the things That are gonna be like like caching or for instance Like if I'm holding an Android device or an iOS device or I'm in a web browser It's like I've mostly just want the caching to work exactly the same I don't want like there to be any platform specific elements to that caching

    14:03 Yeah, and framers can kind of smooth over those differences. So your product code can actually be your product code, right? Makes sense Yeah, so you mentioned server driven UI and I don't know that there are a lot of people who know about server driven UI what what that really entails and

    14:22 And it was your talk where I finally realized Oh RSCs are server driven UI like that. These are you can implement server driven UI with RSCs And so I would love to if you could explain a little bit about what server driven UI is What are the use cases and and how RSCs enable those use cases?

    14:48 Yeah, it's a good question I think you know server driven UI can have different interpretations So if you think like in the context of something like Netflix something more standard You know like like in an iOS app, right you can't actually like server render a UI view

    15:09 And send it over the like in a website. You can render, you know to a static template and send that down Mm-hmm. So it's server driven It's somewhere between like flags in a way Where you're indicating like this is the structure of my app. This is how I want things to To work and then when you want to interact, you know make some sort of large change

    15:31 So something outside of like a micro interaction or gesture, you know Like a full state change then you go back to the server for more information come back and that gets You know really tricky when you think about caching and how it works offline and local first RC is You know, obviously our like server components are just very complicated so they they

    15:52 You can think about the RSC payload the flight or whatever as in a way server driven UI because it is Not native to the platform. It is this like custom new line delimited JSON schema Which is changing based on like the the runtime that you're in on native on web

    16:11 Basically, I mean on web is actually pretty is changing to with client components, right? Like you indicate with use client that there is a new custom Component that you need to fetch from the server and render before you can keep traversing Not just pretty close to server driven but then on web you can you have that third pass right where you can then like

    16:28 Run over it with a node parse and then turn the RSC into HTML With like all the script tags with the like the push stuff And then that is closer to server rendering because you're rendering what the actual native format is for the device So native is somewhere between server driven and then with RSC we could actually

    16:48 like at build time we can generate the RSC, but we could also indicate that the native runtime can just Interpret the RSC directly to native use so in a way it could be server rendered I don't know it's somewhere in there But you would generally consider a server driven UI and a scope where you're like All right

    17:09 This is JSON and indicates how the UI views or the Android view should render And then server rendered would be more towards like HTML which actually draws to the page natively Mm-hmm, and so it's a ambiguous as you can see I'm Yeah, yeah, so I I think You maybe you can correct my understanding on

    17:33 what your demo was doing, but my my impression was that With with RSC in native that we can have the server send the RSC payload and just like in the web how we have like references to client components

    17:47 There are also references to interactive components that the phone or the device will go to the server or to get those like The code for those and then that turns it to native views is it so it's basically the same on native as well Yeah, yeah, it's exactly like that, but you have more Intrinsic elements in

    18:07 RSC on web so you can have just like divs, right? You can have zero JavaScript bundles That is technically possible with read native and I would love to make that possible Where you could you know, basically render all the way out to RSC and then just have the RSC And then you don't need any JavaScript to make that RSC render

    18:27 So you could get to a world where you know people talk about like right native is like JavaScript on native It's just the RSC payload and native use And web can do that, you know where it has a div instead of like a client component Right now everything is a client component So before it does anything it needs to fetch some client components and a lot of those just live offline

    18:44 So it's fine. They can bring it down to Hermes bytecode. It's a little runner instantly the Performance properties are all over the place because a native we can just bend the rules however we want But yeah, it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's it's Yeah, it does Pull script tags and render those from split bundles

    19:05 Which is fantastic for server actions because it means in my demo specifically when the server action Would do like the map view part for instance That map view code is not on the device Like it comes down the native map view part is but the JavaScript which orchestrates the map view is not on the device

    19:24 So you can ship a much thinner bundle, which is great for OTA updates and just overall app size What this means is that you can fundamentally have an app like a website which can scale to infinity terabytes of Information, I mean there's you know larger sizes in the terabytes, but yeah, it can scale to infinity size right now

    19:42 You ship everything client-side. There is a Mac size like whatever your phone can handle and there's probably some app store limit as well I've never gotten close to hitting it, but I'm sure lots of like the Facebook app But when I hear when the people talk about the Facebook app You can only add new functionality if you remove some functionality of equal or greater size

    20:01 That's really not the case with our see like you can just scale it as large as you want and then fetch the code when you Access that page so it becomes a lot more like the web but you know But no, but it just becomes more like the web and it's it's fantastic. So I'm very excited about that property in particular

    20:19 Yeah, I I was thinking like now you can reasonably make the everything app That like does all of the things Because you're not worried about how big that is going to get or how long it's going to take to load or any of that Because it all comes from the server Which is so cool Yeah, it's pretty fantastic

    20:39 I actually think that this is maybe one of the most fundamental differences between web and native over the years You know like when we were building Expo file-based routing was definitely a big compromise But file-based writing is very intrinsically connected to data fetching

    20:54 And well not just file-based but just routing in general routing in general is very intrinsically connected to data fetching Which is connected to rendering right like the rendering patterns based on how you data fetchers based on how you navigate around the app You need all three of those pieces connected and native isn't never had anything quite like that and

    21:12 When you lose that or if you only have one or two elements of that then you just have this Fundamental forking between your web code base and your native code base, which is not worth Compromising on right like you don't want to give up That on the web in order to just build everything from scratch like you might on native

    21:30 So I am pretty sure that when we get that on native that you can actually very reasonably take your web knowledge and your web code base and Go right to the App Store and and actually have like a better Like experience on native than you would have had if you built it any other way Mm-hmm. Yeah, and

    21:49 Speaking to that specifically you've been showing off some demos on X of some ideas of how to compose Between native and web which is very interesting. Can you tell a little bit about what you've been working on with that? Yeah, yeah, I'm glad you brought that I mean that is crazy. So that is

    22:08 That's actually one of the like reasons I was so excited about server components this idea of Like composing web and native content together so with native you You know like in react native you have two two elements that are really important You have the API's and the views and react native can draw truly into views

    22:30 But the API's are written basically like the browser, right? You have like macros which bind functionality to the JavaScript global and you can call into those So like navigator geolocation is installed by like some C code on to the JavaScript global Same deal in react native. So really the fundamental difference between web and native is those views and like how you draw and

    22:53 Yeah, and like no matter how close we get to Like working like the DOM It's just never going to draw the same way as the DOM like the DOM is just so Fundamentally, it just has its own rules and those are different to like the performance specifications of iOS and whatever Android does and like

    23:10 So if you want to draw like the web, which in a lot of cases you do You should be able to just like you can use a web view But a web view isn't great for everything. So there's been cases in the past where people like have framework so you can just Like render in a web view, but the problem with those is that yeah web view isn't great for everything So then you're like stuck in this web view world

    23:31 So expanding on react server components where you have a JavaScript engine in your server and your client We took that and then added this use DOM directive and this is all experimental all canary not sure about it yet But it's pretty good and then you can basically just add a use DOM directive to a

    23:51 Component and then when you import that component it imports it as a web view boundary so it has like same multi-dimensional bundling that I use client directive would where it then like splits off and then At that point in development at least it creates an on-demand reference to the bundler to then bundle the rest of that component

    24:11 As a website instead of as a native app for whatever platform using and then it uses all the same bundling techniques because one problem Web views is that you like you can add HTML to them, but that's not how people build websites, right? like they use file-based routing and they use like tailwind and lots of things which are hard to just add so you can all the

    24:29 same like complex modern react front-end web features and Everything is the same universal bundling You just drop in this directive what's magical about this means you can go from web to the App Store immediately and then Unlike you know traditional web you purchase read it to start from scratch here You can then just move the boundary up and then

    24:53 Incrementally migrate over to truly native views like you can write Swift UI views And like you can you just replace parts of that your website with Swift UI views or jetpack compose views or Android views wherever you want and on any platform, so Like fundamentally you could also do this on desktop and it would be similar to electron but if you wanted to go from electron to

    25:16 a truly native app like Component by component that would be possible of course, there's some drawbacks like the When components when it's not at the root and you have multiple DOM elements These are like individual web views so they don't share the same JavaScript globals or or context

    25:35 I think there's like some ways around that like maybe we'll do something where if you have global CSS You can like define, you know, like what you want in your head element and then have that shared You know the framework type features like that but Yeah, I mean ultimately this I think gets us really close to the react on native paradigm where hmm

    25:56 It feels like it's react on native And then if you're like this is kind of compromise II and like my app does because like JavaScript and a web views starts up Much slower than Hermes bytecode which starts up almost instantly because of memory mapping Hmm so in cases like maybe the first thing you would change is going to be like the navigation you want that to be native You know gestures animations

    26:16 That's the first part that people really feel and then maybe the second thing is going to be like your initial route Like whatever opens when you launch the app because you want that to just like start up instantly and not see the JS loading states And then there's probably parts you'll just leave as web views like yeah

    26:35 I was gonna ask about that like our is there a future where you just keep some stuff around just because it's better or Easier that way Yeah Yeah, actually, I think there's a couple really good examples so one is going to be Just like the compromise is gonna be WebGL because WebGL is pretty unencumbered

    26:56 Unless you run your device in low power mode in which case then it starts to throttle the frame rate inside of web views And so That would be a case where you'd want to maybe move over if you're throwing primarily mattered if it was actually like some ambient Animation like I know in like the shop app for instance

    27:11 They have this like floating globe with like trees saved as it does shipping that would actually maybe it might be better if it like Throttles down in low power mode because now you get this automatic optimization on you know like more ambient animations and interactions And

    27:28 Markdown fantastic like you markdown or rich text editing are probably the two biggest because Everyone who tries to build these or implement them You know at a certain scale you just start to realize that you're mostly just re-implementing the web right like If it really did like because some markdown editors right it'll start web first

    27:46 And they'll be like yeah sure just drop some HTML in and now you're gonna start trying to build that natively and you're gonna be Like okay, how do we parse this HTML? Maybe you'll build an HTML parser. You're like okay. It should just be a web view Yeah, web view is probably better And all of this is made possible because of the the innovation of react server components and and just

    28:10 the composability between React components that live in a different environment, right? Yeah, yeah, so you fundamentally the concept of using a directive to create a a different dimension in your bundler to split out and then reacts ability to

    28:28 Yeah, be compositional so unlike server components at least right now in this first iteration. You don't have the ability to do things like Have native children of a DOM component Yeah It would be cool. There were a way to do that maybe if we flip the paradigm then everything would be web first and then native would be like the default platform, but

    28:51 Not sure. I don't know I've been noodling on that for a bit That would be like your primary difference Yeah, you need to find a way for DOM to render native, and I don't think that is a thing Yeah, yeah, I mean maybe a complete over the top or you could have because I mean like

    29:10 So this starts to get really funky when you start to mix DOM components with server components So like I was doing that yesterday because I'm working on a new talk, and I was trying to Yeah, do something crazy again, but it probably won't and Like if you have a server component based framework everything's server component by default So then if you add a use DOM my current thinking is that that would just act like a use client

    29:33 So it would create a client boundary if you had server components inside of that DOM boundary So like if it basically just started over and now it was web again now You're getting into the territory of like creating new server components nested inside of client components like that becomes a possibility And then it starts to get really funky so you could also do like

    29:53 You know SPA style RSC like without a router so maybe you could say DOM components can't do individual like routing or independent routing But they can you know traverse back And so that's where you might want to get into the space of like maybe I can render our like server

    30:09 Children and then server children can be nested in DOM components so that they render individually Outside and then you can nest them inside of a DOM boundary, which is otherwise a client component Hmm, so yeah weird validation, but with DOM components and react and all this like it also means It's fully type safe, so you can just import it

    30:29 And then you have like the same type props So normally when you interact with a web view you have to like set up this event system to go back and forth With this you just pass props like static serializable props to the DOM component And it just updates like it has a transport bridge where it can interact back and forth

    30:45 Because server components are static right like you don't you can't pass them context because they've rendered at a different point in time Whereas a DOM component it is dynamic. It's rendering on the same device. It is live so it does have the ability to communicate back and forth So that that property is fundamentally, but can you do like callbacks and stuff too? Yeah, you can't do callbacks

    31:08 Yeah, so you can pass it functions And then it can call those functions as long as that they're always asynchronous that can't be synchronous So it's actually very similar to server actions Uh-huh internally they call like native actions, but mostly they're just functions

    31:21 They have like again very different properties of server actions because server actions are secure right like they they run off of the device Whereas these run on the device, so you shouldn't like interact with class sequence in them huh, and then Maybe maybe we'll add the ability to do refs so you could pass a ref to a DOM component

    31:40 And then you can like call like that was imperative Like imperative calls back into the like there's no reason not to I think it would just be yeah Just a matter of typing like if we can't get the type script stuff right then I think that would be a limiting factor in my opinion Yeah, but like that's an escape patch anyway

    32:00 I think right so validation is just super important for like you know people just don't read the docs right so like Really really important in cases like this where you've got this whole new world and like bundling gets involved I'll bet you that the people who are using Expo really appreciate your attention to detail in that Yeah, I hope so

    32:22 Yeah, I mean they're the native developers and their development Just doesn't like really get a lot of the same like this is something that I think it's fundamentally come from the web web developers and and people who really built frameworks like like you can't and

    32:35 yeah, I think native has a lot to learn in terms of like developer experience and so that's actually maybe the main thing that we Try to bring in Expo. It's like the developer experience of the web to native And these things where you get like beautiful error messages that tell you exactly what to do We have a lot of work to do but like you know we're getting there

    32:55 Yeah, well you know on the website. We could learn a lot about like beautiful native components That are native to the platform because like what we have on the web is kind of a joke Compared to what you get on native platforms Yeah Yeah, I mean

    33:15 It'd be nice if yeah the gesture system was better. I wonder how we could yeah Yeah, really sure I think a lot of people a lot of smart people have racked their brains over this Spend a few seconds thinking about it. Yeah, yeah, yeah for sure well. Hey Evan This is super fun chatting with you is there anything that we didn't talk about that you were hoping we could get to in this chat

    33:38 Yeah like one other thing that I think is interesting about DOM components that is A place where you would just use a DOM component in favor of a native component would be when loading from a CMS So I was just trying this yesterday actually where I set up a Shopify store, and then I never done that before and Admittedly and Then I made it like headless

    34:00 I was trying to connect to a website and then load it from a native app and with Shopify you can you know create these Pages which are just HTML you data fetch them and then on you know like if you're using a react framework What you do is you would load it, and then you would pass it to like dangerously set in our HTML and then that's how it would render and

    34:18 Stuff like that is actually perfect for DOM components right like that's verbatim How you would use it is like this this effectively enables the concept of dangerously set inner HTML on native like you would just add A use DOM, and then you literally can pass the HTML, and it will render it So I think that is like the maybe I think I named three other things fourth thing so I'm very antsy about this

    34:38 fourth thing where I think it is like a Prime place where you would use it in favor of a native component and outside of maybe those four things Native is probably the way to go so you would use DOM to incrementally migrate from web over to native outside of Those things and there's probably more. I haven't been thinking about it for very long

    34:56 Yeah, yeah, I think that's cool, and one of the things that I just love about React and this ecosystem is that even after 11 years of react Eleven and a half years we are still discovering cool new things that we can do because react continues to innovate They're not just sitting around doing nothing, but they are

    35:18 Like solving real problems that people have in an enabling Completely new paradigms that we'd never really considered before just taking that composition model and shoving it as like Everywhere that they possibly can squeeze in every drop out of it. Yeah, I mean yeah It's if you're someone who's trying to like learn

    35:36 The number like one thing you can learn it to be successful as a developer I think react is really the space because I started with like objective C and all these other languages And then I was you know so I was like on a tear just going through languages But when I found react it's like it's not a language But you know when I found that you know react

    35:51 Specifically is I've just been at least like stuck here just because there's so much that you can do with it and so many different opportunities and I predict it will be like that for You know at least you know maybe five to ten more years, so yeah, yeah I I think it's been like five years or so that I decided you know

    36:10 I'm pretty sure react is the last framework anybody needs to learn because by the time react falls out of favor AI will just be doing something completely different, and we'll just be talking to AI the whole time Very real possibility yeah, well my hats off to

    36:27 You can't for like doing being education doing educational content in the space because it's changing so much. That's I Can't imagine what that's like At the same time it's like remarkably stable to like that They the react team really cares about the stability of the framework and and like stuff that worked

    36:46 You know five years ago probably still works now And in fact like I think for most people who are stuck on an old version of react It's not there like react. That's really the problem. It's the Different libraries that they're using that aren't compatible with the latest version react and aren't maintained anymore

    37:04 And so they have to swap those out first and stuff so react has done The the number of breaking changes in react has been really pretty small relative to how long it's been around and how big it is Which is yeah, just like hats off to the team For what they've done impressive. Yeah great point

    37:24 And I guess that surface area does get smaller with every version like if you think about all the data fetching like now That's just like when I was doing the Shopify stuff yesterday I was looking at like old Shopify templates and a lot of data fetching Libraries and then they're like the newer versions would just have no data fetching libraries. They would just be all in RSC

    37:41 Yeah, yeah, I guess it's yeah, it's getting it's gonna scale better with time. Yeah, that's amazing Super cool, and I love this stuff that you're doing Evan What's the best way for people to reach out to you and and connect with you keep up with what you're doing? Yeah on X at bacon bricks and Evan bacon

    38:00 That's really the only place I post so super well, thanks so much Evan. We'll see you all in the future I'll see you very soon at react universe and Yeah, looking forward to it. Awesome. Yeah. Thanks so much Bye everyone