Тёмный

Dan Is Back, Let’s Rethink React 

Theo - t3․gg
Подписаться 339 тыс.
Просмотров 86 тыс.
50% 1

It's been awhile, but Dan Abramov is really back. Time to talk about React Server Components. Don't forget to say in the comments at what moment it clicked :)
SOURCES
www.youtube.co...
Check out my Twitch, Twitter, Discord more at t3.gg
S/O Ph4se0n3 for the awesome edit 🙏

Опубликовано:

 

30 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 310   
@BarryandBonji
@BarryandBonji 4 месяца назад
did React get so far down the client side rabbit hole it forgot how the web used to work? We used to call this 'seeding' when I was writing PHP for small business 15 years ago (granted much less cleanly and well integrated with the client). Don't get me wrong I'm a big fan of SSR and these methodologies but doesn't it strike anyone else as a bit odd that this is somehow touted as a new concept..
@willsmith444
@willsmith444 4 месяца назад
yes.
@DanAbramov8
@DanAbramov8 4 месяца назад
I'm not saying it's a new concept but a lot of people started web development in the last few years so it's novel to them.
@andru5054
@andru5054 4 месяца назад
@@DanAbramov8love your mind and the talk! Merge my PR on your blog🥺😂those images aren't gonna optimize themselves
@BarryandBonji
@BarryandBonji 4 месяца назад
@@DanAbramov8 sorry Dan I didn't mean to come off so critically, I really enjoyed your talk. One of your many talents is an innate ability to frame concepts in simple yet elegant terms that make them available to a large audience and we're all the better for the work you're doing.
@edhahaz
@edhahaz 4 месяца назад
'Laravel includes the ability to seed your database with data using seed classes. All seed classes are stored in the database/seeders...' point being, yeah, you used to call it
@micortes89
@micortes89 4 месяца назад
I think the concepts started to click for me ten years ago when I was coding in PHP 😅
@mazharansari7813
@mazharansari7813 4 месяца назад
Dan's Look: 😈🩸🔪 Dan's Voice: 🌷🌸🍃
@nasso_
@nasso_ 4 месяца назад
awh come on dan looks cute too!
@rea1m_
@rea1m_ 4 месяца назад
More like 🏳️‍🌈☠️
@kass160
@kass160 4 месяца назад
He's gay
@beastnighttv
@beastnighttv 4 месяца назад
dan looks better than most of us bro 💀
@mazharansari7813
@mazharansari7813 4 месяца назад
@@nasso_ yeah a little bit
@hamburger--fries
@hamburger--fries 4 месяца назад
Dan is awesome and Theo has a crush on Dan :-)
@zenpool
@zenpool 4 месяца назад
Dan is awesome and I have a crush on Dan since 2016 ( early days of redux )
@nasso_
@nasso_ 4 месяца назад
i mean. look at him.. who wouldn't..
@heyl_yt
@heyl_yt 4 месяца назад
I think every React developer has a crush on Dan
@vivekkaushik9508
@vivekkaushik9508 4 месяца назад
​@@heyl_ytnope not all React devs are gayyyyyyyy..... Jk Dan is good looking but let's not over react.
@JOJO_THE_PROGRAMMER
@JOJO_THE_PROGRAMMER 3 месяца назад
​@@heyl_yt as a react dev I confirm this lol
@Gordonfreems
@Gordonfreems 4 месяца назад
That streaming tech is so crazy, I didn't even KNOW browsers could render html in "chunks" like that and render the rest later within a single HTTP request/response, and I've been working with this stuff for 13+ years
@devduttsinh4704
@devduttsinh4704 4 месяца назад
Dang! And I was thinking I didnt understand the tech i am using
@imkir4n
@imkir4n 4 месяца назад
Healthy Tip: Take a sip of water whenever Dan takes one.
@VivekYadav-ds8oz
@VivekYadav-ds8oz 4 месяца назад
Well he's talking a lot so you might overhydrate and need to pee more often. Maybe do it every 2nd sip.
@colorfulfool
@colorfulfool 3 месяца назад
@@VivekYadav-ds8oz What if I get a hydration error?
@EyalShalev
@EyalShalev 4 месяца назад
24:00 Drupal (PHP Framework) actually provided the ability to embed (and update) state as JSON for client side behavior 10-15 years ago.
@dmitriyobidin6049
@dmitriyobidin6049 3 месяца назад
Shhh, js people don't like to hear that they are not reinventing the wheel...
@jackmono
@jackmono 3 месяца назад
Drupal primarily focuses on server-side rendering of web pages. While Drupal can render dynamic content on the server and has modules for enhancing this capability, it is not inherently component-based like React. Drupal’s architecture is monolithic and page-centric, whereas React’s is component-centric and modular. Drupal: Uses traditional server-side rendering to generate HTML sent to the client. While Drupal can be extended with JavaScript frameworks to provide a more interactive client experience, it does not inherently support the same level of component-based rehydration and interaction that React does. React Server Components are designed to be used within the React development workflow, leveraging the same tools and conventions that React developers are accustomed to. This consistency in the developer experience is a significant advantage. While Drupal is powerful and has been around for a long time, the development experience can be quite different and more complex due to its PHP-based architecture and the need to manage a full CMS stack. This can be a barrier for developers more familiar with modern JavaScript frameworks.
@narsustv1331
@narsustv1331 Месяц назад
@@dmitriyobidin6049 Nobody said that.
@flwi
@flwi 4 месяца назад
I got most of the concepts already, but the part at 1:02:45 where you suspend a slow component is _very_ impressive.
@devduttsinh4704
@devduttsinh4704 4 месяца назад
I actually too just learned it a month ago from my senior!
@尼古拉丝土豆
@尼古拉丝土豆 4 месяца назад
use door
@oncedidactic
@oncedidactic 4 месяца назад
Lol.
@JerrytheMouse42
@JerrytheMouse42 4 месяца назад
use matrix
@davidsiewert8649
@davidsiewert8649 4 месяца назад
Theo: your simplification of 2 requests (csr + api call) are always worse than 1 request (SSR) - is not correct if the resource usage are vastly different. If I'm hosting on a single server (I do not want to jump on the cloud hype train) SSR rendering is much more expensive than API requests served by an inline sqlite database -> by a factor of 100-1000x. I my current benchmarks I can serve 10-30k requests per second using the api Endpoint. Using nextjs SSR I can only serve 200 SSR-requests with data per second. That's nearly 100x worse.
@victor95pc
@victor95pc 4 месяца назад
Beside that you can speed up the initial load by sending the initial request in the HTML, so it would be only one 1 request from your server(HTML) and another one in CDN(to provide the JS files), that way you skip the initial request and save server resources, no need to use anything fancy, this is kinda what Inertia.js does, but you also dont need it.
@perc-ai
@perc-ai 4 месяца назад
if you use actix in rust you can serve 1m requests. if you use liveview in phoenix you could serve 1m+ tcp connections through websockets
@davidsiewert8649
@davidsiewert8649 4 месяца назад
Serving 1m requests without a db connection is useless (you can just serve the files through a CDN instead). Show me the repo if you archive this speed in Rust with a real db.
@tomtech1537
@tomtech1537 4 месяца назад
@@perc-ai serve 1m requests? wtf are you on about
@devduttsinh4704
@devduttsinh4704 4 месяца назад
​@@perc-aiidk what are you resolving actually? Dns?
@amithmkini
@amithmkini 4 месяца назад
24:54 This is what initially kept me off from React when I was working with Django. Everytime I wanted to create an app with React or Angular, we had to have a separate API endpoint for data. That really drove me off of JS frameworks back then.
@JLarky
@JLarky 4 месяца назад
20:01 as someone with some PHP experience and who actually wrote my own RSC framework, I'm with the chatter here, this is how we did PHP+jQuery all those years ago
@jackmono
@jackmono 3 месяца назад
React Server Components (RSC) significantly advance the older PHP and jQuery approach by offering a unified, component-based architecture that seamlessly integrates server-side and client-side rendering. Unlike PHP and jQuery, where server-generated HTML and client-side DOM manipulation are distinct and separate processes, RSC allows components to be rendered on the server and hydrated on the client, enabling optimised performance, modularity, and maintainability. RSC also leverages modern JavaScript workflows and state management, offering superior SEO and initial load times. While PHP and jQuery laid the groundwork for dynamic web applications, RSC provides a more sophisticated, efficient, and cohesive solution for modern development needs.
@Alkyen
@Alkyen 3 месяца назад
@@jackmono why are you called jackmono if it's actually chatgpt ?
@diablo-project
@diablo-project 4 месяца назад
Great talk, great video. Btw, if you are the one who thinks that RSC are useless, then you didn't need it in the first place, and that's fine. Not everyone needs it. RSC wasn't and will never be the "This is why you should use react" thing. It is purely the solution to the problem that people have using react for things react was not designed for: partial interactivity on multiple places. If your website consists of static pages or is some sort of dashboard: Yes, it's not a problem. And you don't have to scream out loud about server being able to render html or about fetch requests being optimal solution...
@chrisdaman4179
@chrisdaman4179 4 месяца назад
It isn't a remotely new concept. It's just partial templates that hydrate. This have been around for a long long time. Longer than php even existed to replicated ajax.
@eslachance
@eslachance 4 месяца назад
This has been clicking for me for so long, I get the idea, but holy hell does it feel like the entire ecosystem is exploding into flames right now. I'm not sure *where* the right RSC (or even general SSR) meta framework is going to be. Is it solidstart? remix? react-router? vinxi? a rewritten nextjs? Some brand new player that'll come out of nowhere? I have no idea! I feel like I'm watching the Betamax-VHS wars again but this time there's a dozen different players, they're all making too much sense so I genuinely don't know which to bet on.
@DaviLimadeMedeiros
@DaviLimadeMedeiros 4 месяца назад
Welcome to the edge
@eslachance
@eslachance 4 месяца назад
@@DaviLimadeMedeiros is there going to be a climax one day? I hope so!
@Zamaraw
@Zamaraw 4 месяца назад
Sooooo, we ended up with php… And worst thing is that laravel can do rest api for you along side with html pages. And you can create mobile native app based on it. this why we go to client/server arch. And you get generated JavaScript code from react server for only web app..
@msahu2595
@msahu2595 3 месяца назад
Baat toh sahi hai ❤
@steve1920
@steve1920 4 месяца назад
I'm anxiously awaiting the moment someone can actually explain how one could configure several bundling setups that might support using ssr + rsc without 'next' being step 1
@diablo-project
@diablo-project 4 месяца назад
I believe that you can use ssr without reconfiguration (it should just run client components and serialize final dom to the html string). Or you are talking about streaming? Then it will not work with ssr anyway.
@zadeviggers
@zadeviggers 4 месяца назад
You can do server components without next easily enough, and you can skip the build tools by using Deno as the runtime, since it handles jsx transparently for you.
@diablo-project
@diablo-project 4 месяца назад
@@zadeviggers But browser don't. This is why we have transpilers. Then this abomination of millions of files from thousands of libraries should be assembled into one .js file, right? This is why we need bundlers. So if you want to use it in real scenarios you have to use it, at least to some extent.
@neociber24
@neociber24 4 месяца назад
But bottom live there are new API in React for that, one renderToStream made for RSC and client-side you have renderFromFetch. There is examples in the React repo but may be hard to undestand
@tyu3456
@tyu3456 4 месяца назад
It's definitely possible without Next, but it's complicated and not straightforward. However, this critique feels kinda unfair at this point - it's like asking how to build a full-stack SSR Svelte application... without SvelteKit. Or Vue without Nuxt, etc etc..
@troglodylethol
@troglodylethol 4 месяца назад
@23:00....no this is exactly how I used to write apps between 2005-2013...I pre-rendered the data on the server and returned some html, js (with pre-rendered data) and css and used jQuery to render and rerender on the client.
@kassios
@kassios 4 месяца назад
Apparently a lot of us did, but it's a new thing now :)
@narsustv1331
@narsustv1331 Месяц назад
@@kassios Nobody is implying this is a new thing
@zaneflow
@zaneflow Месяц назад
22:40 when he said "the data is ALREADY THERE" DAMN... it clicked.
@innomin8251
@innomin8251 4 месяца назад
Going to have to +1 the "this is how we've been doing it for years" thing... I was doing this back in a Perl CGI application circa 2008/2009. Now obviously React puts some nice DX around it, but we're not actually doing anything new. What I find more valuable than the wild wild west of server components on NextJS, is the conventions encouraged by Remix. That to me is valuable, and as the server components make that part even better, we'll be in a really nice place then.
@kassios
@kassios 4 месяца назад
I find it cringe that this is presented as a new thing. This has been a very old pattern and I am pretty sure whoever thought streaming react from the server (renderToPipeableStream) new very well of those old solutions. Obviously using React as a template language and all the other optimizations 20 years later are a very welcoming proposition.
@kassios
@kassios 4 месяца назад
There is nothing "new" about these patterns, this is the way server side rendered pages worked prior to SPAs. And yes, we did pass data as objects to be used by JavaScript for interactivity. The fact that React can be used as a template language to produce static html in some parts of the page is cool but the whole concept is as old as PHP. So as mainly a React developer currently I am all for it, but it feels cringe to present these concepts as new. This is a more of a “philosophical” question between SPAs and regular HTML pages. With the introduction of ajax calls the possibility of a Single Page Application became a reality so as to improve User eXperience and overcome page transitions. Ajax calls shifted a lot of the logic away from the source of truth which is the server, into a thick and interactive client. The server-first pattern feels more natural for developing because it is more compatible with the static server/client web that was envisioned in the early stages. SPA on the other hand is how a user expects a modern app/page to perform. React has been a great abstraction and paradigm on top of the archaic Html DOModel.
@tomtech1537
@tomtech1537 4 месяца назад
The cringe bit is theo going on and on about it clicking like it's magical. Like I either understood this in the first few minutes of Dan's talk or I completely misunderstood... even the justification re. behaviour being sent... mate you haven't seen the hacked out shit I've written over the years and I've done that more than once with and without data. I wanted to hear how this is important for the ecosystem or what this will mean in terms of patterns going forwards... instead of just gush gush gush.... to the point of unwatchable
@brennan123
@brennan123 4 месяца назад
The conceptual framework of a "door" between the client and server is a step in the right direction but it is also a step in the wrong direction at the same time. This is like thinking of main memory and CPUs as 2 separate machines / processes; CPUs use registers for their local memory, and you can think of accessing main memory like an API call. Yes, it is the case that they are separate systems with separate hardware, but when we are writing code we tend to think of them as more integrated into a single abstract machine-the boundary, while there, is not something we need to deal with unless there are specific reasons we might want to (optimization, security, etc). At the lower levels they are separate systems but the community / tooling / design has evolved to facilitate the illusion that they are 1 system. These lower levels of concern should be the domain of compilers and programming language design, such that we make these 2 systems feel like they are 1 integrate abstract machine. We don't care or are knowledgeable when working at the higher levels whether that variable is in main memory, or a register and don't need to write the plumbing to move it back and forth. That is what the compiler is supposed to do. This same pattern needs to exist for the client / server paradigm. The programmer should be knowledge that there are 2 separate subsystems (client and server) but we should rely on the compiler and design the language / framework in such a way that they seem more integral. While I think RSC are an incremental improvement to help with this problem, it is not thinking abstractly enough. We need to take a step back and look at things from a higher level instead of just thinking incrementally. "Let's Rethink React" instead of just incrementally improving it. Instead of thinking of 2 separate systems, let's build an abstract model of 1 system that we can target and supply additional information to the compiler where needed to address the boundary problem. Also, we should NOT be doing things like "useState", that should just be an ordinary variable and typed such that the compiler knows that it is something that needs to both satisfy more requirements as well as have some instrumentation to support it. Ex: const stateVar: ComponentState const serverVar: ServerState The compiler then sees these types and can do the additional work to fill in the plumbing. P.S., ComponentState is probably the wrong paradigm as well. I like how SolidJS separates "state" into more flexible and composable primitives that are orthogonal to Components.
@Pharoxx105
@Pharoxx105 4 месяца назад
I’ve been writing web code for over two decades, I always thought this paradigm was the right way to go. For a while there it seemed like all the frameworks are going in the wrong direction but now it feels so good to see everyone rounding back, so this kind of workflow.
@eljaz00
@eljaz00 4 месяца назад
RSC’s serialization is more powerful than JSON.stringify.
@flwi
@flwi 4 месяца назад
What a great talk! I'm impressed how he boiled it down to very simple pieces that are easy to understand (imo). Impressive to do live coding with javascript on stage 🤯
@xxgunnery
@xxgunnery 4 месяца назад
So it's just HTMX + React basically, but the client side JS + server integration is more cohesive
@Ked_gaming
@Ked_gaming 4 месяца назад
interrupting every 10s no wonder this is 1h long ...
@Kane0123
@Kane0123 4 месяца назад
Just go watch the original? Skill issue bro sorry
@mrmagnetic927
@mrmagnetic927 4 месяца назад
I'm so shocked how web developers are NOW understanding how a SERVER works. SMH
@charliecarrot
@charliecarrot 4 месяца назад
Better late than never, right? Why complain about someone learning something?
@СэрШпинат
@СэрШпинат 4 месяца назад
you mean SPA developers? I am doing php since 5.4 and golang for 6 years, I consider my self as web dev. i guess i know how server works)))
@СэрШпинат
@СэрШпинат 4 месяца назад
@@charliecarrotbecause i have to work with those spa developers and talk to them. all they know is how to get a json...
@nisabmohd
@nisabmohd 4 месяца назад
I used this combination of client and server, and it’s very effective. I was creating an application where users can paste and view markdown content, with the option to protect it with a password. The main challenge was rendering the markdown. I used server-side rendering for the markdown and passed it to the children of a client component. If the paste was protected, a password dialog opened in the client component, and a server action verified the password. Once verified, the markdown, rendered on the server, was displayed with client interaction.
@msahu2595
@msahu2595 3 месяца назад
Nice
@pianoman6216
@pianoman6216 4 месяца назад
I've been thinking about this whole tech RU-vid stuff more and more, and you know what? It's just too niche. I think a large part of the audience is people who want a job in software development that fluctuates in and out, and a small core is the people who actually enjoy the content and appreciate what you have to say. Don't get me wrong you make GREAT insightful videos, and they've helped me view programming in a different light. I'm glad you exist as a resource because most of RU-vid is shit react tutorial hell, but I really feel like you're putting a TON of effort into something that isn't going to net benefits past a certain point. And you're like close to the top of this niche, probably second only to prime. Even slight mass-appeal shifts like Mental Outlaw's stuff on hacking-related news for lay people, or Code Report's news breakdowns by the week would make your channel pop off. You know, something that your average thumb can passivley absorb while taking a shit instead of having to sit down and really pay attention. Respectfully, how many people know who Dan is? How many people know what Laravel for php is and are working with newer JS, frameworks and watching tutorial-style educational stuff? How many people care about Next.JS's new something or other. Again you are very close to the top of this niche, so I don't think you should pivot away from this stuff, but maybe make another channel and try to generalize, with your production value I don't see how you wouldn't skyrocket if you can have a bit more mass appeal. Love u take care.
@rjmunt
@rjmunt 4 месяца назад
New to programming? I think there's plenty of content for you. Folks who have been at it for a long time still need content. The things you mentioned arent niche.
@t3dotgg
@t3dotgg 4 месяца назад
Already have a second channel for this and my most popular video is a rant about cameras over there lol. I’m lucky I can focus on making vids on what I love and people watch it
@universe_decoded797
@universe_decoded797 4 месяца назад
Theo is top, i found a job because of him and also left it because i used theo’s knowledge against them and they didn’t agree at all 😂
@yoz0__
@yoz0__ 4 месяца назад
Most of this kind of tech content is just watered down documentation with some extra remarks. Don't get why you need hours of content about NextJS, cause it's very simple. If you're having trouble understanding NextJS or something else, probably you should learn some fundamental things first.
@boredbytrash
@boredbytrash 4 месяца назад
There’s a reason why Theo also owns a company. I think he is well aware that Tech Influencer‘s sphere is rather limited. But what happens if the bubble suddenly expands, Theo (and Prime and some others) will spearhead to the top
@charliecarrot
@charliecarrot 4 месяца назад
Awesome coverage of this talk! This was really eye-opening for me
@MegaCystic
@MegaCystic 4 месяца назад
It is something that we used to hack into PHP which is why chat was right and the concept has existed for 20 years. This is exactly how we passed data to Javascript with PHP. And that was when IDE's were complete dogshit so you would look at those giant strings and your eyes would bleed.
@KarlOlofsson
@KarlOlofsson 26 дней назад
Didn't he forget to actually use CatNameGenerator in the server when he tested it? Looked like he just copied over the behaviours from the HTML string to showcase it as components, but tested it with the orginal code? I.e. I was expecting him to also remove the logic above the return and just having CatNameGenerator and RevealButton references in the html 🤔
@helleye311
@helleye311 4 месяца назад
Gotta love people saying "it's the same as XYZ 10 years ago" in the comments. Sure, the concept is the same. But XYZ isn't React and doesn't have this combined with full client-side reactivity. Really the only thing that's the same is the left-side API code that Dan wrote that basically just returns a string template. Maybe you could write a cat name generator with it by embedding a script tag. But then you're writing two different languages, not to mention the fact you probably only have jquery (at best) to do the updating. And the best part is, you can still use standard fetch or react query to update the data afterwards if you want. You won't have a full page reload whenever you navigate a paginated table, you can get infinite scroll. Not to mention streaming/suspense. Just the fact you can do suspense around all your dynamic components means you get the layout immediately and content later, just like you'd have with standard react, but without the waterfall, and without extra server calls. Absolutely loved this talk.
@RaZziaN1
@RaZziaN1 4 месяца назад
So it is same as XYZ except this time you can use js instead of using 2 languages.. only difference..
@victor95pc
@victor95pc 4 месяца назад
Yeah XYZ is faster than React being rendered in the Server, most of language has their template being generated using C, do you really think React can be rendered in the server faster than ERB which is made in C? Why dont you send the data you need for the initial state inside the HTML and render the React component with it, that way you skip the whole RSC
@botafi
@botafi 4 месяца назад
the comment is right, this was in php 20 years ago
@lobaco
@lobaco 4 месяца назад
Dunning-Kruger much?
@WishPL
@WishPL 4 месяца назад
I feel like this pattern existed in the wild for a long while, I remember doing things with PHP and jQuery, I would create var global = { ... } data for the page and html elements, and then per each page load (server render), there would be assertion to that object and jquery returned from the ie Controller to do reactive stuff utilizing that var global that got set in body of the document by a server, or have jQuery script utilizing var global {...}. 17-18 years ago in PHP you could render into HTML your JavaScript state and then have (Client code) in the form of jQuery do the reactive magic and where stuff could change you could either ajax request on demand to get freshest data. Albeit back in the days we didn't have much patterns to keep things consistent it was down to individual dev or team to keep the code organized and structured. Now we can finally do what is for the most part (arguably) the same thing, just using only JS code. Also there are things like inertia.js
@kassios
@kassios 4 месяца назад
Yes my friend, it appears we are doing a full circle back to that pattern but with React as a template language (as well as a client library). The "problem" / difficulty is that it now comes as an abstraction where the line of what is server side rendered or not is not clear. Back in the PHP years what we were doing was obvious to the naked eye. Now it is some side note on next.js documentation pages.
@penname4764
@penname4764 4 месяца назад
@@kassios IMO, the PHP devs are sniffing this out but there's a paradigm shift going again. If React or any of these other "Frontend Frameworks" figure out an elegant and simple way of doing SSR + SPA experience, this will be the slow death of MVC Frameworks as they'll be considered legacy and inferior and won't be newly adopted outside of simple projects.
@kassios
@kassios 4 месяца назад
@@penname4764 I don’t see these commenters as PHP backend devs that hacked their way to the frontend. The hardcore backend guys would not touch javascript back then. It was the frontend guys (who had to use some backend language to get any db data) that delved into such paradigms. So I see most are onboard with the SSR shift and are actual proponents of this pattern, but it feels cringy as hell that these solutions are presented like a eureka moment.
@tommycard4569
@tommycard4569 4 месяца назад
The process of "Removing boundaries that are inessential to the problem": 18:00 lifting state (async state is lifted to server context with intent to pass to client) 21:00 rebuild functional ssr (rather than static page, we can dynamically integrate state and logic at request time) 26:30 cross-boundary composability (yoink!) 31:55 eliminating api calls (as long as its static, otherwise its gotta rehydrate anyway ig) 44:00 & 49:00 doors (defines convention for signifying client data flow, server context is default) 1:02:20 suspense (very cool, just watch it. lazily slots in server components when available/resolved) 1:13:00 component data constraints and typing (enforcing data types between computers at the component interface as it is now a network interface as well) Individually, I don't think any of these are particularly surprising, but the paradigm of how it unifies all these solutions is certainly elegant.
@tommycard4569
@tommycard4569 4 месяца назад
I am a Solid and Vue main, so I have yet to work in a codebase using RSCs. The biggest draw to React for me is the native scene and since they got RSCs working there, perhaps thats my opportunity to give it a whirl. The points I'm wary about: - Waypoints: one of the nice things about an explicit API is that hard endpoints are simple and communicable. They are waypoints for a team to communicate actions and data, both internally and publicly (with no unnecessary detail). A competing paradigm may be confusing and it seems less communicable - Adaptability: tightly coupling your FE and BE in this way seems less extensible/agnostic than a traditional API. If you are required to expose endpoints to additional services or 3rd parties, you may find yourself playing both games. - Spaghetti: I fear it may be hard to navigate as your backend service now becomes a fullstack amalgam. I'm curious what organization strategies people implement to clarify whats server specific, what shared/agnostic/isomorphic, whats client only and how easy it is to onboard into that. - Refetching: Rehydrating and updating volatile data will likely require an explicit endpoint anyway. Apps are increasingly dynamic these days (practically video games), so API elimination may not be as far reaching for all use-cases. - Open-sourcing: its common that backends are often private while frontends are open-sourced and/or public API's exposed. I worry this contaminates the boundary of what you may and may not want to share (in a trivial manner at least). - mental overhead: in such a simple example, the context separations are simple and distinct. I worry that as an app grows more frequent context switching will add additional burden to writing, debugging, and reading code. That is purely speculative, not an outright criticism. Would love to hear from those with experience if those are reasonable concerns. Or rather what thorns/misdirection they encountered their first time with RSCs and how they overcame them.
@perc-ai
@perc-ai 4 месяца назад
@@tommycard4569 your worries are mostly fruitless speculation and you are failing to see the delta in productivity and performance from this new paradigm . Anybody that has worked in the industry know's what happens when parts of a feature need to be modified by the higher-ups so they let the engineering lead know and depending on the context of the change he will either notify the backend developer(s), frontend developer(s) or both. The backend engineer now has to make a completely new api end point that does nearly the same thing as the original design, or he has to modify the existing api design and then ping the frontend engineer to know about the api spec change. The frontend engineer then modifies the typescript and the business logic to adjust for the new endpoint or change the endpoint. Congratulations you just bloated your api spec design with a new endpoint that does nearly the same thing as the original api design. You just pinged your whole team because you had to, because of the client server paradigm your used to doing cause you did it most of your career. With RSCs, all you had to do was ping a single person. That person could have easily modified the existing RSC with a conditional statement to account for the api spec change and could have done it in record time. You just saved mental energy from all your team because you didnt have to ping various engineers. You just improved performance because you optimized the number of bytes that is sent to the client in a request. Its a no-brainer to not use this new paradigm shift when building nextjs applications.
@CoenBijpost
@CoenBijpost 2 месяца назад
It’s funny how this actually goes back to the very early days of web, when parsing script from php files was regular practice. You often just generated the arrays and objects in php directly into script tags. There was almost no asynchronicity back then, because requests were expensive. So you made sure the js was provided with the data at response. Just now with all these abstraction layers and components, you forget that that’s still a useful paradigm. And it happening here is an eye opener, while also being recognisable like an old sweater 😅 Edit: yeah, this is what I actually always thought react was. Seeing as both client and server run javascript, I always thought the boundary was non-existent anymore. This whole js server idea started to take off just before I became chronically ill, so I never actually looked further into it. But seeing this now, server components has done what I always had in mind from the early 2010s. Cool to see it coming to full fruition now.
@MichaelKire
@MichaelKire 4 месяца назад
34:00 and if you'd then also do static site generation and only revalidate on changes from whatever data source you're using, then you'll get a very fast and cheap site to run. But ofc you'll then move the complexity to the cache / revalidation step which can bring some serious hard to debug issues.
@dawidos0095
@dawidos0095 4 месяца назад
Clicked for me on 19:34
@bluedragon4008
@bluedragon4008 Месяц назад
lot of this reeeally clicked about 10 yrs back... This gives me just a small hint of my JSP driven PTSD.
@Maleficarios
@Maleficarios 4 месяца назад
None of this shit seems to matter at all if you are not building full stack and instead have a full separation of code between FE/BE. Most of the companies I worked for develop BE as standalone APIs for standalone FE to use with no concept of SSR whatsoever, which at best gets slapped on later with some generic "one-off" server that just serves the requested page and lets FE continue from there.
@50Kudos
@50Kudos 4 месяца назад
Got some time watching this, not impressed yet for 'use client' for +serialized interactive markup. The composability is not really unique i guess the 'use server' part, it could be like useContext whose deconstructed dispatch knows where the server store is.
@CoenBijpost
@CoenBijpost 2 месяца назад
1:03:00 Isn’t that 10 second streaming connection incredibly expensive? Keeping an open connection was never really the best option before, but maybe that’s changed…
@CoenBijpost
@CoenBijpost 2 месяца назад
18:43 was when it clicked. We know at request time a lot of the stuff that our javascript is going to need at runtime, so why wait for the asynchronous call, instead of feeding it directly. That’s my guess of where it’s leading.
@arianj2863
@arianj2863 4 месяца назад
clicked for me at 12:06. Now it seems a bit stupid to send html to the client that the client where the client AGAIN has to send a request back to the server to get more data. If we are already sending html and we are pretty sure that the user will need the data from the API endpoint, why not also add the needed data (this is a trade-off right because every request you send is bigger, but clients dont have to wait if they need the getCatName functionality, whereas a more traditional approach would allow you to send less in every first request, but then if the clients want to use the getCatName functionality, they would need to wait for the API response. How do we go about deciding whether this is worth it? When to add client-specific data in the server component and when to allow for asynchronuous API fetches?)
@cyneostudio
@cyneostudio 4 месяца назад
Technologically, it's impressive and allows incredible things to happen, but I'm afraid it encourages the average developer to mix his business logic code (database/data logic/rights/etc.) with his interface code and no longer properly separate the two. Which brings us back to old-style PHP projects, where HTML was generated in a monolithic, non-maintainable and non-upgradeable project. I think this will degrade the overall quality and maintainability of codebases, but only time will tell.
@bossRODTV
@bossRODTV 4 месяца назад
I think using monorepo approach will gives the way to scale it as long as you separated your data access layer you can still create an API with the same data access layer without having any dependencies to the monolith approach you did in your project. And I think one of the good thing as well you still have the option to opt in if you want the behavior of SSR or CSR with react.
@AnatolyPashmorha
@AnatolyPashmorha 4 месяца назад
I wouldn't say it's unique. .NET offers Blazor Stream Rendering and various modes for rendering UI components: on the client, on the server, or even in a hybrid setup.
@neociber24
@neociber24 4 месяца назад
41:30 So Sveltekit was right into separating the client and server in different files. Something I undestand is why they allowed inline "use server" directives when is totally different for client/server components.
@shocked-curry-omelette
@shocked-curry-omelette 3 месяца назад
@ 23:00 SSR with Nuxt and VueJS does this. We define client UI and behaviour on server side. Does react does SSR differently before this?
@TouqeerShafi
@TouqeerShafi 4 месяца назад
Bro, I don't know which world you react devs live in, I used to do the same thing almost 10 years ago when I used to work with jQuery, I convert the php array using json encode and passed to javascript on the client. server function are just fancy word for selling the product.
@TouqeerShafi
@TouqeerShafi 4 месяца назад
The issue arose when people began to treat frontend libraries/frameworks as a means to build a complete application solely on the client-side. The main problem at that time was how to obtain pre-rendered data. One of the classic problems was with Open Graph Tags. If an application was entirely client-side, it was not possible to render the Open Graph Tags correctly. At the time, all the major social media platforms could only crawl and interpret server-side rendered code, as they were unable to execute the JavaScript required to generate the necessary tags.
@peterszarvas94
@peterszarvas94 3 месяца назад
great talk, but basically any server side templating library can do this, php lavavel, go templ... you don't need a js frameworks for it
@nexovec
@nexovec 4 месяца назад
23:04 jokes on you, you can render HTML with embedded javascript, rendering doesn't imply static only.
@neociber24
@neociber24 4 месяца назад
50:04 At the bottom "t3dotgg/angular"? So finally theo move tk Angular
@SnakeCaseGuy
@SnakeCaseGuy 4 месяца назад
It's like the Yo Dawg problem. Yo dawg, I think you like the button be sync, so I put some sync in the async.
@rlstrength
@rlstrength 4 месяца назад
I don't get the gamechanging aspect here been doing this for years. With other technologies usually using the window object to pass stuff around to avoid templating the js but it's not really as much of a big brain tbh
@BowangLan
@BowangLan 4 месяца назад
Clicked for me at 18:12
@worldadmin9811
@worldadmin9811 3 месяца назад
i got server components before watching this but 1:03:00 was the moment that made me go "oh wow this is really something special" where u showed passing not only data and state from server to client but full components
@timekouka
@timekouka 4 месяца назад
clicked in at 33:09
@EvestDev
@EvestDev 4 месяца назад
58:24 what about Nuxt? o.O
@neociber24
@neociber24 4 месяца назад
A lot of people compare this with PHP, but the main difference I see between RSC and PHP is that in PHP you don't have the ability to seamless comunicate between client/server because are 2 different languages. There are solutions that use Websockets that is the closest thing. We webdevs really like to destroy that wall between server and client, C# have a similar solution, and LiveView in Phoenix.
@perc-ai
@perc-ai 4 месяца назад
liveview relies on the network aspect and because of the BEAM the webserver is so strong they allow all clients to run on websockets. Liveview basically creates a door between the database and the server and a door between the server and the client. Its basically the thanos of all these web frameworks, even NextJS can't compare because NextJS does not want to control the database layer and even if it did it would have to interop with the BEAM otherwise it woulnt be able to handle millions of concurrent connections like LiveView since NextJS relies on NodeJS which is single threaded
@ellamurii
@ellamurii 3 месяца назад
react js is like Apple bruh. reinventing the wheel and making it sound like it's groundbreaking
@user-pw5do6tu7i
@user-pw5do6tu7i 4 месяца назад
24:55 click
@camoman1000
@camoman1000 3 месяца назад
Would love a talk about how react achieved this copy and paste code logic in react framework
@JLarky
@JLarky 4 месяца назад
1:01:05 speed run of trying to show how RSC works until the first next.js cache issue
@nexovec
@nexovec 4 месяца назад
Why the hell do you use technologies people need to "rethink" every other year(or a week)?
@orlvni
@orlvni 4 месяца назад
21:30 clicked
@key-boy
@key-boy 4 месяца назад
33:32 yeah, don't torture client device
@edhahaz
@edhahaz 4 месяца назад
Sure it's more than php, but what are you really gaining? The ability to use React in your projects? Maybe you don't truly need React for a good UX. Or is it optimistic updates ? which are kinda hard to do with RSC anyway. Not having to write an API is cool I guess... and streaming...
@DaviLimadeMedeiros
@DaviLimadeMedeiros 4 месяца назад
it's nice that u question and answer in the same paragraph. thx for your mind dump.
@nicolas_vl
@nicolas_vl 4 месяца назад
Will all due respect to Dan, but nowadays not reinventing, but renaming and restructuring an old concept is a break-through. Find a technology, stick to it, make it better, let it mature. Right now we have incomplete semi-working solutions until the next one comes.. BTW, while I am not using Svelte, it looks a lot like it. and a template
@nicolas_vl
@nicolas_vl 4 месяца назад
Wow watching this more closely, it is 2005 PHP. Start the file, include DB credentials, make a DB call, add some JS, add some styles, add some HTML and send it to the browser. OR make it an API, a simple router, and return the following. ob_start(); include "$uri.php"; $template = ob_get_clean(); And now the API returns the whole document, prebuilt, with CSS, JS and everything. Are we serious?
@artist6000ish
@artist6000ish 4 месяца назад
This is the first video ofr Theo's that I had to stop watching because of the number of times he interrupted. It was literally impossible to follow what Dan was talking about. To Theo's point, go watch Dan's actual video. Ok. Great. But this video, right here, is literally unwatchable for me. And I love Theo's videos in general. Damn dude. Calm the eff down.
@DaviLimadeMedeiros
@DaviLimadeMedeiros 4 месяца назад
I wonder how much coffee he drinks to speak and manipulate code so fast, often I check if the video is not in 1.5x
@rapzid3536
@rapzid3536 4 месяца назад
Dan is really smart but lacks the "it" factor when it comes to designing solutions with good developer ergonomics. Redux - strike 1. Hooks - strike 2. I feel pretty certain whatever he's on about now isn't gonna be "it".
@arianj2863
@arianj2863 4 месяца назад
Why do you feel as if both of those lack the 'it' factor?
@Herxh428
@Herxh428 4 месяца назад
By reading your comment it seems that he is better at Building the foundation of problems but cannot make it much developer friendly
@ark_knight
@ark_knight 4 месяца назад
Hooks are light year better than class component lol
@ProtectedClassTest
@ProtectedClassTest 4 месяца назад
​@@arianj2863yes smart.. but sadly he is solving trivial problems with trivial solutions.. the cult supporting this half baked technologies makes the progress of web development one step forward, two steps back
@DubiousNachos
@DubiousNachos 4 месяца назад
Dan wasn't the one who came up with the idea of hooks - that was Sebastian Markbage. Dan was just one of the people who debuted the proposal and was one of the earliest communicators about hooks
@luaneo
@luaneo 4 месяца назад
Dan’s a legend
@LinhLinhBD
@LinhLinhBD 4 месяца назад
he created the most hated state management. At first devs thought it was useful. And will solve many problem down the road when your app get bigger and bigger. It doesn't because most app get shut down.
@aeronwolfe7072
@aeronwolfe7072 4 месяца назад
we all know what a "talk" is. geez. i think i'll go watch the actual talk.
@everistusolumese9350
@everistusolumese9350 3 месяца назад
It clicked for me here 19:53 when he hoisted the request to the server.
@sethbozz
@sethbozz 4 месяца назад
I don’t understand the excitement 🤔. Isn’t it what we have already been doing for a while now with nextjs’s client components/server components ??! I’m confused.
@VanyaYani
@VanyaYani Месяц назад
I guess NextJS was the first to implement the RSC proposed back in 2020. React 19 has brought the RSC to the React itself. So I guess it's reintroduction of RSC to a wider audience who don't use NextJS.
3 месяца назад
I want to see the matrix with the one way doors too! please share.
@stroiman.development
@stroiman.development 4 месяца назад
"My rule stands. The only people who actually know how this works have PhDs in graph theory or work at META" - brilliant 🤣
@DaviLimadeMedeiros
@DaviLimadeMedeiros 4 месяца назад
🌶
@willsmith444
@willsmith444 4 месяца назад
I'm glad PHP with some JavaScript taking over on the frontend is "clicking" for all these people.
@jocdiazm
@jocdiazm 4 месяца назад
Protect this guy’s smile at all costs
@kinestate
@kinestate 3 месяца назад
clicked seconds before you said it, im stunned
@paasijainen4222
@paasijainen4222 4 месяца назад
if you are building a closed system with lots of interaction, just stick with client side rendering and json api backend. clear separation of client / backend, business logic, security, etc... if you need your pages to be rendered on server (f.e. for search engines) just use some mature approach like aspnet mvc and paint the interactivity on top with javascript tech of your choice...
@brennan123
@brennan123 4 месяца назад
Server actions are kind of a hack that doesn't go far enough. If we are already going to have a compiler in the process splitting things into client code and server code, why not just do away with the "use sever" and instead have things at a more granular level? Annotate variables as being from the server and then just use the variable as a normal variable. The compiler should be responsible for splitting it up. An additional layer can specify the bindings (similar in mechanism to IBAction/IBOutlet in native iOS apps). This also has the benefit of mocking, testing, analytics where you can substitute or enhance those bindings however you want.
@MrSofazocker
@MrSofazocker 4 месяца назад
Regarding sending an initial html document and having the server update it with a long-lived initial request with fetched data later, did everyone forget about 'Transfer-Encoding': 'chunked'? Or 206 Partial Content? Or content_type='text/event-stream'? If your api sits on a different server? Or WebSockets? or SSE? 17:52 - Okay I don't get it, but ill keep listening 18:16 - Well yes, "generated html server-side" kinda? if everything is generated on demand, you can't cache it effeciently or do some weird stuff, if your initial layout is static, it's just a file and can be cached by a CDN just like that, no weird request caching etc., but I'll keep listening 20:02 - No, nothing "clicked" yet, now the client has to wait on the server to make the call to the /api/cat-names before even sending anything... 21:34 - Going on a limb here, put a $ in front of it? 22:01 - Ey... great me 22:28 - Still... how's that different than a html template with properties you set before sending it? Answer.. nothing.. 19:48 I agree more with soso9352 here, now we have come full circle and do stuff exactly how we used to... 22:40 - yeah duh... you generated the html on the server the data is already there, and you stalled the client for the first page-load. 23:18 - "not the part that is interactive"... that's just a matter of you utilized SSR... not what it means. If it's all visual, or you hydrate your page with additional functionality, is yours to decide. AED, it's just text yo. 24:07 - Yes, the server tells and changes the JavaScript based on what the server tells the client to do. 24:36 - yes why tf do you need a json api to do it? just have it generate it in the response... that's not black magic 25:00 - Yes, why do you need an api just to render UI? Just render the right UI the first time around... 26:10 - 💯great talk, great technique... that's how you already always should've done it!? Great he's introducing it to the react world. 26:55 - Yes, great move, only expose the data to the client, which the client will end-up seeing and reduce the document size. 28:38 - pretty much exactly how php is written, also it's irrelevant that there's network in-between or anything else in-between for that matter. 29:05 - MVC was always arbitrary and had to fit your particular problem, if you nonsensically applied to everything in the past then... man I can't help you. But then again MVC is such a high level abstraction you might miss the nuance... what is the html document string on the return? One might call it a view? what is the function above? One might call it a controller what is the line "await readFile(cats.txt)" (which would be a db call)? One might call that a Model, or you cat names, where you can select a random name from. 30:25 - yes, that's why you have templates for? Noone writes html in a string lmao. Me, a script kiddie from 2003 would tho. And it worked, and so had "server components" back then you say? 31:02 - "What if you want two of those buttons?" - Before I listen to what you have to say... >My answer is you pull that into a component, one might call it a function, and call it with the properties you lay upon them, when inserting it into your html template. 31:10 quickly falls apart you say? Aha, you didn't see how he pulled everything else out of the script tag into a function above? Why couldn't you, wouldn't you pull that entire script tag out as well as function, with a parameter of the json???? 31:36 - Yeah... wouldn't that be neat huh? Ahah components.... 33:12 - "If you have html requests that streams the rest in overtime" - Yeah wouldn't that be great if the HTTP spec had first-party support for, Idk streams? 41:55 - "You can just do the thing the backend api is doing like a db call" - That's what people call a model. 42:33 - Aand now we finally come full circle... "the api can generate the right user experience" yes, that's what one might call a view. It's not just html, it's not json, or just js.. it's ALL OF THAT. I digres. Please continue. 49:17 - But does it really send javascript, or embed a script tag? it's just text-yo. It's not that deep. 52:40 - OKAY, Now I get it, sorta... bcs it's a "component" you can just chuck it into your view, but again once the request actually comes in to the server end-point it just calls the "servercomponent"/function, which calls the button component, which just replaces it in place with the reveal-button and it's probs, which gets evaulated to a and placed in the html with the scripts. And the bundler adds the script etc. based on your settings with the correct js version... literally 3 layers of "magic". I get now why you are excited and how that would be a nightmare before... in react. 54:41 - Yeah, you said it here again... the "magic"... why add "magic" and layers of obfuscation? It's just text... it's not that deep. I'm still gonna just say functions... and elements... and you'll end-up realizing how really non exciting this is to non react devs... that you can pass children elements, or an entirely different function, that all has to get executed on the server before hand to get evaluated down to the html elements and their scripts, I hope you realize how this always could've done, was done, will be done. 57:51 - "That's significantly easier than the way we did this before" - Yes, I agree. I don't really know what you used to do before now tho, and now I really don't wanna know :D Maybe now is a good point to start using react since it feels less batshit insane without a giant waterfall. 59:59 - Yes, it's just a function, that composes it. 1:04:12 - Okay streaming as a composable wrapper is quite cool... but then again... no other framework? As if streaming was invented by react and not a literal HTTP spec.
@dmitriyobidin6049
@dmitriyobidin6049 3 месяца назад
Js devs are very good at making their lifes harder, so that they could ask for a bigger salary. Nice.
@t4kumi704
@t4kumi704 3 месяца назад
just become a js dev then
@aaaaaaaaaaaaaaaaaaaaaaaaaaaab1
@aaaaaaaaaaaaaaaaaaaaaaaaaaaab1 4 месяца назад
describe PHP without describing PHP:
@johngill5175
@johngill5175 3 месяца назад
19 for your vide, 5:24:59 for the talk. Thanks this helped a ton it clicks now!
@johngill5175
@johngill5175 3 месяца назад
I hope someone gets my terrible joke, it "clicks" now, this was right were he removed the async from onClick
@remrevo3944
@remrevo3944 3 месяца назад
57:54 I mean there are a few frameworks that do that integrated ssr similar to this. For example the rust library leptos has so called server functions that can be called exactly the same, both on server and on client and are executed on server when run during ssr and make an API call from the client to the server, when executed on the client. It doesn't have the *exact* same semantics has react server components, but what you can get out of it is pretty similar.
@WoutMertens
@WoutMertens 3 месяца назад
33:20 - If you have resumability like Qwik, then you get both models at the same time: The server renders a finished page, but if the client wants some updates, it can pick up where the server left off and do the requests itself.
@vorant94
@vorant94 4 месяца назад
27:02 of your video the same thing about "I don't know yet whether it will be explained later", but now that even Math.random was lifter to the server it is just a server rendering, there is no meaningful behavior left to define for client, everything is generated in advance and if so why wait for click to reveal the answer? just show the result in the first place, but it is called server side rendering
@arcuscerebellumus8797
@arcuscerebellumus8797 4 месяца назад
When you're not enveloped in and/or blinded by the madnass that is modern web for too long, this kind of pattern doesn't sound too revilatory. (I guess) Especially so when you're just working with strings. PS: that's not to say that stuff that's around it totally makes sense to me...
@josecarloscorreamandujano5109
@josecarloscorreamandujano5109 4 месяца назад
what would be the aprproach to reset the button to get a different cat name?
@DaviLimadeMedeiros
@DaviLimadeMedeiros 4 месяца назад
throw all names through the door and move the compute (random selection) to the client so that you avoid fetch on the client, and endpoints. or server actions if u want to keep the compute on the server
@josecarloscorreamandujano5109
@josecarloscorreamandujano5109 4 месяца назад
@@DaviLimadeMedeiros Thank you!
@belphegorPrime
@belphegorPrime 4 месяца назад
for the A,B,C example it would be interesting if you had sayed something to the case what would be best when we want every time we "switch" to B we render a new random cat name.
@eXquisiteBuddy
@eXquisiteBuddy 4 месяца назад
I'm about to watch the video, if signals' proposal for javascript isn't mentioned i'm gonna b mad
@patricks7611
@patricks7611 4 месяца назад
I've done some research inside my company about serverside rendering a bunch of years ago. Oh do I whish this talk did exist back then ♡ soooo good.
@codeChuck
@codeChuck 4 месяца назад
19:21, Oh click! This is just amazing and simple :) Lift the async request to the parent computer (server)
@_aNeaire
@_aNeaire 4 месяца назад
Oh my maybe its my lucky day today, I am looking for a next js tuts to watch and yt algorithm just slap me this, what a good start
@Ryan-vn7de
@Ryan-vn7de 4 месяца назад
Rethinking React... again. Jesus this is exhausting.
@sbbu3742
@sbbu3742 2 месяца назад
Get over it
@Ryan-vn7de
@Ryan-vn7de 2 месяца назад
@@sbbu3742 Okay lol
@thepawelk
@thepawelk 4 месяца назад
It really clicked for me at 1:16:00
@TheKaosTux
@TheKaosTux 4 месяца назад
I understand the concept… what about authentication, search & filter inside of this mental model? How do we do that?
Далее
How React Query Won
34:52
Просмотров 78 тыс.
`const` was a mistake
31:50
Просмотров 136 тыс.
ХОККЕЙНАЯ КЛЮШКА ИЗ БУДУЩЕГО?
00:29
Microsoft Regrets Using React (For Edge)
14:28
Просмотров 169 тыс.
98% Cloud Cost Saved By Writing Our Own Database
21:45
Просмотров 383 тыс.
I Was Wrong About React Router.
19:06
Просмотров 62 тыс.
We need to talk about "founder mode"
44:16
Просмотров 47 тыс.
If this ships, it will change javascript forever
25:54
Просмотров 205 тыс.
A Video About Queues
25:49
Просмотров 55 тыс.
Why would any startup do this?
25:29
Просмотров 33 тыс.
Six Years Later, I’m Over GraphQL
34:40
Просмотров 70 тыс.