{"id":54981,"date":"2024-08-28T07:00:00","date_gmt":"2024-08-28T14:00:00","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=54981"},"modified":"2025-05-26T10:58:16","modified_gmt":"2025-05-26T17:58:16","slug":"komponenty-serwera-react","status":"publish","type":"post","link":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/","title":{"rendered":"React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React"},"content":{"rendered":"<p>React by\u0142 pot\u0119g\u0105 w tworzeniu aplikacji internetowych przez ostatnie <a href=\"https:\/\/vercel.com\/blog\/10-years-of-react\" target=\"_blank\" rel=\"noreferrer noopener\">dziesi\u0119\u0107 lat<\/a>.<\/p>\n<p>Wszyscy widzieli\u015bmy, jak ewoluowa\u0142o to od niepor\u0119cznych komponent\u00f3w klasowych do elegancji hak\u00f3w.<\/p>\n<p>Ale React Server Components (RSCs)?<\/p>\n<p>Nikt chyba nie spodziewa\u0142 si\u0119 tak dramatycznej zmiany w dzia\u0142aniu React.<\/p>\n<p>Wi\u0119c, czym dok\u0142adnie s\u0105 Komponenty Serwera React? Jak dzia\u0142aj\u0105? I co robi\u0105 inaczej, czego React ju\u017c nie m\u00f3g\u0142 zrobi\u0107?<\/p>\n<p>Aby odpowiedzie\u0107 na wszystkie te pytania, szybko om\u00f3wimy podstawy. Je\u015bli potrzebujesz przypomnienia, rzuci\u0107 okiem na ten <a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/nauka-react\/\" target=\"_blank\" rel=\"noreferrer noopener\">przewodnik jak nauczy\u0107 si\u0119 Reacta jako pocz\u0105tkuj\u0105cy<\/a>.<\/p>\n<p>W tym po\u015bcie przeprowadzimy Ci\u0119 przez powody, dla kt\u00f3rych potrzebowali\u015bmy komponent\u00f3w serwerowych React, jak dzia\u0142aj\u0105, oraz jakie s\u0105 g\u0142\u00f3wne korzy\u015bci z RSCs.<\/p>\n<p>Zacznijmy!<\/p>\n<h2 id=\"h-what-are-react-server-components\" class=\"wp-block-heading\">Czym s\u0105 komponenty serwerowe React?<\/h2>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2400\" height=\"1800\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree.webp\" alt=\"Diagram drzewa komponent\u00f3w serwera React pokazuje hierarchi\u0119 i miejsca, w kt\u00f3rych r\u00f3\u017cne typy komponent\u00f3w s\u0105 renderowane w aplikacji.\" class=\"wp-image-48948 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree.webp 2400w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-300x225.webp 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-1024x768.webp 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-768x576.webp 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-1536x1152.webp 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-2048x1536.webp 2048w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-600x450.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-1200x900.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-730x548.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-1460x1095.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-784x588.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-1568x1176.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-877x658.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/01_react_server_components_tree-1754x1316.webp 1754w\" data-sizes=\"(max-width: 2400px) 100vw, 2400px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 2400px; --smush-placeholder-aspect-ratio: 2400\/1800;\" \/><\/figure>\n<p>Pomy\u015bl o komponentach serwera React jako o nowym sposobie tworzenia aplikacji React. Zamiast dzia\u0142a\u0107 w przegl\u0105darce jak typowe komponenty React, RSC dzia\u0142aj\u0105 bezpo\u015brednio na twoim serwerze.<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u201eMy\u015bl\u0119, \u017ce RSC maj\u0105 by\u0107 &#8220;komponentyzacj\u0105&#8221; backendu, czyli odpowiednikiem backendu tego, co <a href=\"https:\/\/single-spa.js.org\/docs\/ecosystem-react\/\" target=\"_blank\" rel=\"noreferrer noopener\">SPA React<\/a> zrobi\u0142 dla frontendu. W teorii, mog\u0142yby w du\u017cym stopniu wyeliminowa\u0107 potrzeb\u0119 stosowania takich technologii jak REST i GraphQL, prowadz\u0105c do znacznie \u015bci\u015blejszej integracji mi\u0119dzy serwerem a klientem, poniewa\u017c komponent m\u00f3g\u0142by przej\u015b\u0107 przez ca\u0142y stos.\u201d \u2014 <a href=\"https:\/\/www.reddit.com\/r\/reactjs\/comments\/1c9yuwj\/comment\/l0ov9jw\/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button\" target=\"_blank\" rel=\"noreferrer noopener\">ExternalBison54 na Reddit<\/a><\/p><\/blockquote>\n<p>Skoro RSC wykonuje si\u0119 bezpo\u015brednio na serwerze, mo\u017ce on efektywnie korzysta\u0107 z zasob\u00f3w backend, takich jak bazy danych i <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/217560167-Application-programming-interface-overview\" target=\"_blank\" rel=\"noreferrer noopener\">APIs<\/a> bez dodatkowej warstwy pobierania danych.<\/p>\n\n\n\n<div class=\"glossary-term\">\n\t<a\n\t\tclass=\"glossary-term__above-title\"\n\t\thref=\"\"\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 640 512\"><path d=\"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"\/><\/svg>\n\t\t<span><\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n    <h3>API<\/h3>\n    <p>Interfejs Programowania Aplikacji (API) to zbi\u00f3r funkcji umo\u017cliwiaj\u0105cych aplikacjom dost\u0119p do danych i interakcj\u0119 z komponentami zewn\u0119trznymi, pe\u0142ni\u0105cy rol\u0119 kuriera mi\u0119dzy klientem a serwerem.<\/p>\n            <a\n            href=\"https:\/\/www.dreamhost.com\/glossary\/web-design\/api\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Czytaj wi\u0119cej                    <\/a>\n\n<\/div>\n\n<p><strong>Ale dlaczego w og\u00f3le potrzebowali\u015bmy RSC?<\/strong><\/p>\n<p>Aby odpowiedzie\u0107 na to pytanie, cofnijmy si\u0119 nieco.<\/p>\n<h2 id=\"h2_traditional-react-client-side-rendering-csr\" class=\"wp-block-heading\">Tradycyjny React: Renderowanie po stronie klienta (CSR)<\/h2>\n<p>React zawsze by\u0142 bibliotek\u0105 interfejsu u\u017cytkownika po stronie klienta.<\/p>\n<p>Podstawowa idea stoj\u0105ca za Reactem polega na podzieleniu ca\u0142ego projektu na mniejsze, niezale\u017cne jednostki nazywane komponentami. Te komponenty mog\u0105 zarz\u0105dza\u0107 w\u0142asnymi prywatnymi danymi (<strong>stan<\/strong>) i przekazywa\u0107 dane mi\u0119dzy sob\u0105 (<strong>w\u0142a\u015bciwo\u015bci<\/strong>).<\/p>\n<p>Pomy\u015bl o tych komponentach jak o <a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/ucz-sie-javascript\/\" target=\"_blank\" rel=\"noreferrer noopener\">funkcjach JavaScript<\/a>, kt\u00f3re s\u0105 pobierane i uruchamiane bezpo\u015brednio w przegl\u0105darce u\u017cytkownika. Kiedy kto\u015b odwiedza Twoj\u0105 aplikacj\u0119, jego przegl\u0105darka pobiera ca\u0142y kod komponentu, a React wkracza, aby wszystko wyrenderowa\u0107:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2400\" height=\"1800\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_.webp\" alt=\"Schemat blokowy: Przep\u0142yw pracy renderowania po stronie klienta, od \u017c\u0105dania u\u017cytkownika do za\u0142adowania strony, w tym odpowied\u017a serwera i przetwarzanie przez przegl\u0105dark\u0119.\" class=\"wp-image-48950 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_.webp 2400w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-300x225.webp 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-1024x768.webp 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-768x576.webp 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-1536x1152.webp 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-2048x1536.webp 2048w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-600x450.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-1200x900.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-730x548.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-1460x1095.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-784x588.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-1568x1176.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-877x658.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/02_how_client_side_rendering_works_-1754x1316.webp 1754w\" data-sizes=\"(max-width: 2400px) 100vw, 2400px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 2400px; --smush-placeholder-aspect-ratio: 2400\/1800;\" \/><\/figure>\n<ul class=\"wp-block-list\"><li>Przegl\u0105darka pobiera HTML, JavaScript, <a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/css-transformacja\/\" target=\"_blank\" rel=\"noreferrer noopener\">CSS<\/a> oraz inne zasoby.<\/li><li>React analizuje <a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/ucz-sie-html\/\" target=\"_blank\" rel=\"noreferrer noopener\">HTML<\/a>, ustawia nas\u0142uchiwacze zdarze\u0144 dla interakcji u\u017cytkownika i pobiera wymagane dane.<\/li><li>Strona internetowa przekszta\u0142ca si\u0119 w w pe\u0142ni funkcjonaln\u0105 aplikacj\u0119 React na Twoich oczach, a wszystko odbywa si\u0119 za pomoc\u0105 Twojej przegl\u0105darki i komputera.<\/li><\/ul>\n<p><strong>Chocia\u017c ta metoda dzia\u0142a, ma ona pewne wady:<\/strong><\/p>\n<ul class=\"wp-block-list\"><li><strong>Wolne czasy \u0142adowania:<\/strong> Czasy \u0142adowania mog\u0105 by\u0107 wolne, szczeg\u00f3lnie dla z\u0142o\u017conych aplikacji z wieloma komponentami, poniewa\u017c teraz u\u017cytkownik musi czeka\u0107, a\u017c wszystko zostanie najpierw pobrane.<\/li><li><strong>Szkodliwe dla <\/strong><a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/popraw-seo\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>optymalizacji pod k\u0105tem wyszukiwarek (SEO)<\/strong><\/a>: Pocz\u0105tkowy HTML jest cz\u0119sto tylko szkieletem \u2014 wystarczaj\u0105cym do pobrania JavaScriptu, kt\u00f3ry nast\u0119pnie renderuje reszt\u0119 kodu. To utrudnia wyszukiwarkom zrozumienie, o co chodzi na stronie.<\/li><li><strong>Zwolnienie w miar\u0119 ro\u015bni\u0119cia aplikacji: <\/strong>Przetwarzanie po stronie klienta w JavaScriptu mo\u017ce obci\u0105\u017ca\u0107 zasoby, prowadz\u0105c do gorszego do\u015bwiadczenia u\u017cytkownika, szczeg\u00f3lnie gdy dodajesz wi\u0119cej funkcjonalno\u015bci.<\/li><\/ul>\n\n<div class=\"article-newsletter article-newsletter--gradient\">\n\n\n<h2>Get Content Delivered Straight to Your Inbox<\/h2><p>Subscribe now to receive all the latest updates, delivered directly to your inbox.<\/p><form class=\"nwsl-form\" id=\"newsletter_block_\" novalidate><div class=\"messages\"><\/div><div class=\"form-group\"><label for=\"input_newsletter_block_\"><input type=\"email\"name=\"email\"id=\"input_newsletter_block_\"placeholder=\"Enter your email address\"novalidatedisabled=\"disabled\"\/><\/label><button type=\"submit\"class=\"btn btn--brand\"disabled=\"disabled\"><span>Sign Me Up!<\/span><svg width=\"21\" height=\"14\" viewBox=\"0 0 21 14\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M13.8523 0.42524L12.9323 1.34521C12.7095 1.56801 12.7132 1.9304 12.9404 2.14865L16.7241 5.7823H0.5625C0.251859 5.7823 0 6.03416 0 6.3448V7.6573C0 7.96794 0.251859 8.2198 0.5625 8.2198H16.7241L12.9405 11.8535C12.7132 12.0717 12.7095 12.4341 12.9323 12.6569L13.8523 13.5769C14.072 13.7965 14.4281 13.7965 14.6478 13.5769L20.8259 7.39879C21.0456 7.17913 21.0456 6.82298 20.8259 6.60327L14.6477 0.42524C14.4281 0.205584 14.0719 0.205584 13.8523 0.42524Z\" fill=\"white\"\/>\n<\/svg>\n<\/button><\/div><\/form><\/div>\n<h2 id=\"h2_the-next-iteration-server-side-rendering-ssr\" class=\"wp-block-heading\">Nast\u0119pna Iteracja: Renderowanie Po Stronie Serwera (SSR)<\/h2>\n<p>Aby rozwi\u0105za\u0107 problemy spowodowane renderowaniem po stronie klienta, spo\u0142eczno\u015b\u0107 React przyj\u0119\u0142a renderowanie po stronie serwera (SSR).<\/p>\n<p>Za pomoc\u0105 SSR, serwer zajmuje si\u0119 renderowaniem kodu do HTML przed jego wys\u0142aniem.<\/p>\n<p>Ca\u0142y ten wygenerowany HTML jest nast\u0119pnie przekazywany do twojej przegl\u0105darki\/mobilnej, gotowy do wy\u015bwietlenia \u2014 aplikacja nie musi by\u0107 <em>kompilowana<\/em> podczas dzia\u0142ania, jak by to mia\u0142o miejsce bez SSR.<\/p>\n<p><strong>Oto jak dzia\u0142a SSR:<\/strong><\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2400\" height=\"1800\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_.webp\" alt=\"Diagram pokazuj\u0105cy, jak dzia\u0142a renderowanie po stronie serwera, z przegl\u0105dark\u0105 \u017c\u0105daj\u0105c\u0105 HTML od serwera i otrzymuj\u0105c\u0105 w pe\u0142ni wyrenderowan\u0105 stron\u0119.\" class=\"wp-image-48953 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_.webp 2400w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-300x225.webp 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-1024x768.webp 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-768x576.webp 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-1536x1152.webp 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-2048x1536.webp 2048w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-600x450.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-1200x900.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-730x548.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-1460x1095.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-784x588.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-1568x1176.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-877x658.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/03_how_server_side_rendering_works_-1754x1316.webp 1754w\" data-sizes=\"(max-width: 2400px) 100vw, 2400px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 2400px; --smush-placeholder-aspect-ratio: 2400\/1800;\" \/><\/figure>\n<ul class=\"wp-block-list\"><li>Serwer renderuje pocz\u0105tkowy HTML dla ka\u017cdego \u017c\u0105dania.<\/li><li>Klient otrzymuje w pe\u0142ni uformowan\u0105 struktur\u0119 HTML, co pozwala na szybsze pocz\u0105tkowe \u0142adowanie strony.<\/li><li>Nast\u0119pnie klient pobiera React i kod aplikacji, proces nazywany \u201ehydracj\u0105\u201d, kt\u00f3ry czyni stron\u0119 interaktywn\u0105.<\/li><\/ul>\n<p>Struktura HTML renderowana na serwerze jeszcze nie posiada funkcjonalno\u015bci.&nbsp;<\/p>\n<p>React dodaje nas\u0142uchiwacze zdarze\u0144, konfiguruje zarz\u0105dzanie stanem wewn\u0119trznym oraz dodaje inne funkcjonalno\u015bci do HTML po jego pobraniu na urz\u0105dzenie. Ten proces dodawania &#8220;\u017cycia&#8221; do strony jest znany jako hydracja.<\/p>\n<p>Dlaczego SSR dzia\u0142a tak dobrze?<\/p>\n<ol class=\"wp-block-list\"><li><strong>Szybsze czasy pocz\u0105tkowego \u0142adowania<\/strong>: U\u017cytkownicy widz\u0105 zawarto\u015b\u0107 niemal natychmiast, poniewa\u017c przegl\u0105darka otrzymuje w pe\u0142ni uformowany HTML, eliminuj\u0105c czas potrzebny do za\u0142adowania i wykonania JavaScript.<\/li><li><strong>Poprawione SEO<\/strong>: Wyszukiwarki \u0142atwo przeszukuj\u0105 i indeksuj\u0105 HTML renderowany po stronie serwera. Bezpo\u015bredni dost\u0119p przek\u0142ada si\u0119 na lepsz\u0105 optymalizacj\u0119 pod k\u0105tem wyszukiwarek dla twojej aplikacji.<\/li><li><strong>Zwi\u0119kszona wydajno\u015b\u0107 na wolniejszych urz\u0105dzeniach:<\/strong> SSR zmniejsza obci\u0105\u017cenie urz\u0105dzenia u\u017cytkownika. Serwer przejmuje prac\u0119, czyni\u0105c twoj\u0105 aplikacj\u0119 bardziej dost\u0119pn\u0105 i wydajn\u0105, nawet przy wolniejszych po\u0142\u0105czeniach.<\/li><\/ol>\n<p>SSR, jednak\u017ce spowodowa\u0142 szereg dodatkowych problem\u00f3w, co wymaga\u0142o jeszcze lepszego rozwi\u0105zania:<\/p>\n<ul class=\"wp-block-list\"><li><strong>Wolny czas do interakcji (TTI): <\/strong>Renderowanie po stronie serwera i hydratacja op\u00f3\u017aniaj\u0105 zdolno\u015b\u0107 u\u017cytkownika do zobaczenia i interakcji z aplikacj\u0105, dop\u00f3ki ca\u0142y proces si\u0119 nie zako\u0144czy.<\/li><li><strong>Obci\u0105\u017cenie serwera: <\/strong>Serwer musi wykona\u0107 wi\u0119cej pracy, co dodatkowo spowalnia czasy odpowiedzi dla <a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/jak-zatrudnic-web-developera\/\" target=\"_blank\" rel=\"noreferrer noopener\">skomplikowanych aplikacji<\/a>, zw\u0142aszcza gdy jest wielu u\u017cytkownik\u00f3w jednocze\u015bnie.<\/li><li><strong>Z\u0142o\u017cono\u015b\u0107 konfiguracji: <\/strong>Konfiguracja i utrzymanie mog\u0105 by\u0107 bardziej skomplikowane, szczeg\u00f3lnie dla du\u017cych aplikacji.<\/li><\/ul>\n<h2 id=\"h2_finally-the-react-server-components\" class=\"wp-block-heading\">W ko\u0144cu komponenty serwerowe React<\/h2>\n<p>W grudniu 2020, zesp\u00f3\u0142 React wprowadzi\u0142 &#8220;<a href=\"https:\/\/react.dev\/blog\/2020\/12\/21\/data-fetching-with-react-server-components\" target=\"_blank\" rel=\"noreferrer noopener\">Komponenty Serwera React o Rozmiarze Zero<\/a>&#8221; czyli RSCs.<\/p>\n<style>.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }<\/style><div class='embed-container'><iframe data-src='https:\/\/www.youtube.com\/embed\/TQQPAU21ZUw' frameborder='0' allowfullscreen src='data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==' class='lazyload' data-load-mode='1'><\/iframe><\/div>\n<p>To zmieni\u0142o nie tylko nasze my\u015blenie o tworzeniu aplikacji React, ale tak\u017ce spos\u00f3b, w jaki aplikacje React dzia\u0142aj\u0105 w tle. RSC rozwi\u0105za\u0142y wiele problem\u00f3w, kt\u00f3re mieli\u015bmy z CSR i SSR.<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u201eDzi\u0119ki RSCs, React staje si\u0119 w pe\u0142ni serwerowym frameworkiem oraz w pe\u0142ni klienckim frameworkiem, czego nigdy wcze\u015bniej nie mieli\u015bmy. I to umo\u017cliwia znacznie bli\u017csz\u0105 integracj\u0119 mi\u0119dzy kodem serwerowym a kodem klienckim, ni\u017c by\u0142o to kiedykolwiek mo\u017cliwe wcze\u015bniej.\u201d \u2014 <a href=\"https:\/\/www.reddit.com\/r\/reactjs\/comments\/1c9yuwj\/comment\/l0ov9jw\/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button\" target=\"_blank\" rel=\"noreferrer noopener\">ExternalBison54 na Reddit<\/a><\/p><\/blockquote>\n<p><strong>Sp\u00f3jrzmy teraz na korzy\u015bci, kt\u00f3re RSC przynosz\u0105:<\/strong><\/p>\n<h3 class=\"wp-block-heading\">1. Zero rozmiar pakietu<\/h3>\n<p>RSC s\u0105 renderowane ca\u0142kowicie na serwerze, eliminuj\u0105c potrzeb\u0119 wysy\u0142ania kodu JavaScript do klienta. To skutkuje:<\/p>\n<ul class=\"wp-block-list\"><li>Znacz\u0105co mniejsze rozmiary paczek JavaScript.<\/li><li>Szybsze \u0142adowanie stron, szczeg\u00f3lnie na wolniejszych sieciach.<\/li><li>Poprawiona wydajno\u015b\u0107 na mniej pot\u0119\u017cnych urz\u0105dzeniach.<\/li><\/ul>\n<p>W przeciwie\u0144stwie do SSR, gdzie ca\u0142e drzewo komponent\u00f3w React jest wysy\u0142ane do klienta w celu hydratacji, RSC pozostawiaj\u0105 kod tylko dla serwera na serwerze. To prowadzi do znacznie mniejszych pakiet\u00f3w po stronie klienta, o kt\u00f3rych m\u00f3wili\u015bmy, czyni\u0105c twoje aplikacje l\u017cejszymi i bardziej responsywnymi.<\/p>\n<h3 class=\"wp-block-heading\">2. Bezpo\u015bredni dost\u0119p do backendu<\/h3>\n<p>RSC mog\u0105 bezpo\u015brednio wsp\u00f3\u0142dzia\u0142a\u0107 z bazami danych i systemami plik\u00f3w bez potrzeby korzystania z warstwy API.<\/p>\n<p>Jak widzisz w poni\u017cszym kodzie, zmienna <strong>kursy<\/strong> jest pobierana bezpo\u015brednio z bazy danych, a interfejs u\u017cytkownika wy\u015bwietla list\u0119 <strong>course.id<\/strong> i <strong>course.name<\/strong> z <strong>kursy.map<\/strong>:<\/p>\n<p><code>async function CourseList() {<br>&nbsp; const db = await connectToDatabase();<br>&nbsp; const courses = await db.query('SELECT * FROM courses');<br><br>&nbsp; return (<br>&nbsp; &nbsp; &lt;ul&gt;<br>&nbsp; &nbsp; &nbsp; {courses.map(course =&gt; (<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;li key={course.id}&gt;{course.name}&lt;\/li&gt;<br>&nbsp; &nbsp; &nbsp; ))}<br>&nbsp; &nbsp; &lt;\/ul&gt;<br>&nbsp; );<br>}<\/code><\/p>\n<p>To jest prostsze w por\u00f3wnaniu do tradycyjnego SSR, gdzie musia\u0142by\u015b ustawi\u0107 oddzielne trasy API do pobierania poszczeg\u00f3lnych element\u00f3w danych.<\/p>\n<h3 class=\"wp-block-heading\">3. Automatyczne dzielenie kodu<\/h3>\n<p>Z RSC otrzymujesz r\u00f3wnie\u017c bardziej szczeg\u00f3\u0142owe dzielenie kodu i lepsz\u0105 organizacj\u0119 kodu.<\/p>\n<p>React przechowuje kod tylko dla serwera na serwerze i zapewnia, \u017ce nigdy nie zostanie przes\u0142any do klienta. Komponenty klienta s\u0105 automatycznie identyfikowane i wysy\u0142ane do klienta w celu hydratacji.<\/p>\n<p>A ca\u0142y pakiet staje si\u0119 niezwykle zoptymalizowany, poniewa\u017c klient otrzymuje dok\u0142adnie to, co jest potrzebne do w pe\u0142ni funkcjonalnej aplikacji.<\/p>\n<p>Z drugiej strony, SSR wymaga starannego r\u0119cznego dzielenia kodu, aby zoptymalizowa\u0107 wydajno\u015b\u0107 dla ka\u017cdej dodatkowej strony.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-4-reduced-waterfall-effect-and-streaming-rendering\">4. Zmniejszony Efekt Wodospadu i Renderowanie Strumieniowe<\/h3>\n<p>Komponenty serwerowe React \u0142\u0105cz\u0105 renderowanie strumieniowe i r\u00f3wnoleg\u0142e pobieranie danych. To pot\u0119\u017cne po\u0142\u0105czenie znacznie redukuje &#8220;efekt wodospadu&#8221;, cz\u0119sto obserwowany w tradycyjnym renderowaniu po stronie serwera.<\/p>\n<h4 class=\"wp-block-heading\">Efekt Wodospadu<\/h4>\n<p>Efekt &#8220;wodospadu&#8221; spowalnia rozw\u00f3j stron internetowych. Zasadniczo zmusza operacje do nast\u0119powania po sobie, jakby wodospad przep\u0142ywa\u0142 przez seri\u0119 ska\u0142.<\/p>\n<p>Ka\u017cdy krok musi poczeka\u0107, a\u017c poprzedni si\u0119 zako\u0144czy. To &#8220;czekanie&#8221; jest szczeg\u00f3lnie zauwa\u017calne podczas pobierania danych. Jedno wywo\u0142anie API musi zosta\u0107 zako\u0144czone, zanim rozpocznie si\u0119 nast\u0119pne, co spowalnia czas \u0142adowania strony.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"547\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-1024x547.webp\" alt=\"Tabela z zak\u0142adki Sie\u0107 w Chrome pokazuje efekt wodospadu przy zapytaniach sieciowych, prezentuj\u0105c r\u00f3\u017cne wywo\u0142ania API i ich czas.\" class=\"wp-image-48955 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-1024x547.webp 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-300x160.webp 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-768x410.webp 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-1536x820.webp 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-2048x1093.webp 2048w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-600x320.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-1200x641.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-730x390.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-1460x779.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-784x418.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-1568x837.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-877x468.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/04_waterfall_effect-1754x936.webp 1754w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/547;\" \/><\/figure>\n<h4 class=\"wp-block-heading\">Renderowanie Strumieniowe<\/h4>\n<p>Renderowanie strumieniowe oferuje rozwi\u0105zanie. Zamiast czeka\u0107, a\u017c ca\u0142a strona zostanie wyrenderowana na serwerze, serwer mo\u017ce wysy\u0142a\u0107 fragmenty interfejsu u\u017cytkownika do klienta, jak tylko b\u0119d\u0105 gotowe.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2400\" height=\"1691\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering.webp\" alt=\"Diagram pokazuje renderowanie serwera strumieniowego: \u017c\u0105dania sieciowe i osi czasu wykonania JavaScript, w tym znaczniki FCP i TTI.\" class=\"wp-image-48957 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering.webp 2400w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-300x211.webp 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-1024x721.webp 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-768x541.webp 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-1536x1082.webp 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-2048x1443.webp 2048w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-600x423.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-1200x846.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-730x514.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-1460x1029.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-784x552.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-1568x1105.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-877x618.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/05_streaming_server_rendering-1754x1236.webp 1754w\" data-sizes=\"(max-width: 2400px) 100vw, 2400px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 2400px; --smush-placeholder-aspect-ratio: 2400\/1691;\" \/><\/figure>\n<p>Komponenty serwerowe React sprawiaj\u0105, \u017ce renderowanie i pobieranie danych przebiega znacznie p\u0142ynniej. Tworzy wiele komponent\u00f3w serwerowych, kt\u00f3re dzia\u0142aj\u0105 r\u00f3wnolegle, unikaj\u0105c efektu kaskadowego.<\/p>\n<p>Serwer zaczyna wysy\u0142a\u0107 HTML do klienta w momencie, gdy jakikolwiek element interfejsu u\u017cytkownika jest gotowy.<\/p>\n<p><strong>Wi\u0119c w por\u00f3wnaniu do renderowania po stronie serwera, RSC:<\/strong><\/p>\n<ul class=\"wp-block-list\"><li>Zezw\u00f3l ka\u017cdemu komponentowi na niezale\u017cne i r\u00f3wnoleg\u0142e pobieranie danych.<\/li><li>Serwer mo\u017ce przesy\u0142a\u0107 strumieniowo komponent, jak tylko jego dane b\u0119d\u0105 gotowe, nie czekaj\u0105c na nadrobienie zaleg\u0142o\u015bci przez inne komponenty.<\/li><li>U\u017cytkownicy widz\u0105 \u0142adowanie si\u0119 tre\u015bci jedna po drugiej, co poprawia ich postrzeganie wydajno\u015bci.<\/li><\/ul>\n<h3 class=\"wp-block-heading\">5. P\u0142ynna interakcja z komponentami klienta<\/h3>\n<p>Teraz, u\u017cywanie RSC niekoniecznie oznacza, \u017ce musisz rezygnowa\u0107 z komponent\u00f3w po stronie klienta.&nbsp;<\/p>\n<p>Oba komponenty mog\u0105 wsp\u00f3\u0142istnie\u0107 i pom\u00f3c Ci stworzy\u0107 \u015bwietne og\u00f3lne do\u015bwiadczenie aplikacji.<\/p>\n<p>Pomy\u015bl o aplikacji e-commerce. Przy SSR, ca\u0142a aplikacja musi by\u0107 renderowana po stronie serwera.<\/p>\n<p>W RSC jednak mo\u017cesz wybra\u0107, kt\u00f3re komponenty maj\u0105 by\u0107 renderowane po stronie serwera, a kt\u00f3re po stronie klienta.<\/p>\n<p>Na przyk\u0142ad, mo\u017cesz u\u017cy\u0107 komponent\u00f3w serwera do pobierania danych produktu i renderowania pocz\u0105tkowej strony z list\u0105 produkt\u00f3w.<\/p>\n<p>Nast\u0119pnie, komponenty klienta mog\u0105 obs\u0142ugiwa\u0107 interakcje u\u017cytkownika takie jak dodawanie przedmiot\u00f3w do koszyka na zakupy lub zarz\u0105dzanie recenzjami produkt\u00f3w.<\/p>\n<h2 id=\"h2_should-you-add-rsc-implementation-on-your-roadmap\" class=\"wp-block-heading\">Czy powiniene\u015b doda\u0107 implementacj\u0119 RSC do swojego planu?<\/h2>\n<p>Nasz werdykt? RSCs dodaj\u0105 <em>du\u017co<\/em> warto\u015bci do rozwoju React.<\/p>\n<p>Rozwi\u0105zuj\u0105 niekt\u00f3re z najwa\u017cniejszych problem\u00f3w zwi\u0105zanych z podej\u015bciami SSR i CSR: wydajno\u015b\u0107, pobieranie danych oraz do\u015bwiadczenie dewelopera. <a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/najlepsze-zasoby-online-do-nauki-kodowania\/\" target=\"_blank\" rel=\"noreferrer noopener\">Dla deweloper\u00f3w, kt\u00f3rzy dopiero zaczynaj\u0105 programowa\u0107<\/a>, u\u0142atwi\u0142o to \u017cycie.<\/p>\n<p>Czy teraz powiniene\u015b doda\u0107 implementacj\u0119 RSC do swojego planu? Musimy odpowiedzie\u0107 tym przera\u017caj\u0105cym \u2014 <em>to zale\u017cy<\/em>.<\/p>\n<p>Twoja aplikacja mo\u017ce dzia\u0142a\u0107 zupe\u0142nie dobrze bez RSCs. I w tym przypadku, dodanie kolejnej warstwy abstrakcji mo\u017ce niewiele zmieni\u0107. Jednak\u017ce, je\u015bli planujesz skalowanie i my\u015blisz, \u017ce RSCs mog\u0105 poprawi\u0107 do\u015bwiadczenie u\u017cytkownika w twojej aplikacji, spr\u00f3buj wprowadzi\u0107 ma\u0142e zmiany i skaluj od tego miejsca.<\/p>\n<p>A je\u015bli potrzebujesz pot\u0119\u017cnego serwera do testowania RSC, uruchom <a href=\"https:\/\/www.dreamhost.com\/pl\/hosting\/vps\/\" target=\"_blank\" rel=\"noreferrer noopener\">DreamHost VPS<\/a>.<\/p>\n<p>DreamHost oferuje w pe\u0142ni zarz\u0105dzan\u0105 us\u0142ug\u0119 VPS, gdzie mo\u017cesz uruchamia\u0107 nawet najbardziej wymagaj\u0105ce aplikacje bez obaw o utrzymanie serwera.<\/p>\n\n\n<div class=\"article-cta-shared article-cta-small article-cta--product\">\n\t<div class=\"tr-img-wrap-outer jsLoading\"><img decoding=\"async\" class=\"js-img-lazy \" src=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/lazy-loading-transparent.webp\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/product-cta-vps-hosting-877x586.webp 1x, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/product-cta-vps-hosting.webp 2x\"  alt=\"VPS Hosting\" \/><\/div>\n\n\t<a href='https:\/\/www.dreamhost.com\/hosting\/vps\/' class='link-top' target='_blank' rel='noopener noreferrer'>\n\t\t<span>VPS Hosting<\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\" width=\"15\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n\n\t<div class=\"content-btm\">\n\t\t<h2 class=\"h2--md\">\n\t\t\tWhen You Expect Performance Get DreamHost VPS\n\t\t<\/h2>\n\t\t<p class=\"p--md\">\n\t\t\tBig or small, website or application &#8211; we have a VPS configuration for you.\n\t\t<\/p>\n\n\t\t        <a\n            href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            See More                    <\/a>\n\n\t<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Chcesz zrozumie\u0107 podstawy React Server Components? Nasz przewodnik pomo\u017ce Ci szybko dowiedzie\u0107 si\u0119, kiedy doda\u0107 je do swojego planu (lub nie).<\/p>\n","protected":false},"author":1058,"featured_media":48941,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_metadesc":"","toc_headlines":"[[\"h-what-are-react-server-components\",\"Czym s\u0105 komponenty serwerowe React?\"],[\"h2_traditional-react-client-side-rendering-csr\",\"Tradycyjny React: Renderowanie po stronie klienta (CSR)\"],[\"h2_the-next-iteration-server-side-rendering-ssr\",\"Nast\u0119pna Iteracja: Renderowanie Po Stronie Serwera (SSR)\"],[\"h2_finally-the-react-server-components\",\"W ko\u0144cu komponenty serwerowe React\"],[\"h2_should-you-add-rsc-implementation-on-your-roadmap\",\"Czy powiniene\u015b doda\u0107 implementacj\u0119 RSC do swojego planu?\"]]","hide_toc":false,"footnotes":""},"categories":[14438],"tags":[],"class_list":["post-54981","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rozmowa-techniczna-pl"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React - DreamHost Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React\" \/>\n<meta property=\"og:description\" content=\"Chcesz zrozumie\u0107 podstawy React Server Components? Nasz przewodnik pomo\u017ce Ci szybko dowiedzie\u0107 si\u0119, kiedy doda\u0107 je do swojego planu (lub nie).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-28T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-26T17:58:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/1460x1095_blog_hero_react_server_components.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2190\" \/>\n\t<meta property=\"og:image:height\" content=\"1643\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Ian Hernandez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ian Hernandez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React - DreamHost Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/","og_locale":"en_US","og_type":"article","og_title":"React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React","og_description":"Chcesz zrozumie\u0107 podstawy React Server Components? Nasz przewodnik pomo\u017ce Ci szybko dowiedzie\u0107 si\u0119, kiedy doda\u0107 je do swojego planu (lub nie).","og_url":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2024-08-28T14:00:00+00:00","article_modified_time":"2025-05-26T17:58:16+00:00","og_image":[{"width":2190,"height":1643,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/1460x1095_blog_hero_react_server_components.webp","type":"image\/webp"}],"author":"Ian Hernandez","twitter_card":"summary_large_image","twitter_creator":"@dreamhost","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Ian Hernandez","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/#article","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/"},"author":{"name":"Ian Hernandez","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/220faf2464d5ae08e41cf5f3b28fdc96"},"headline":"React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React","datePublished":"2024-08-28T14:00:00+00:00","dateModified":"2025-05-26T17:58:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/"},"wordCount":1796,"publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/1460x1095_blog_hero_react_server_components.webp","articleSection":["Rozmowa Techniczna"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/","url":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/","name":"React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React - DreamHost Blog","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/#primaryimage"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/1460x1095_blog_hero_react_server_components.webp","datePublished":"2024-08-28T14:00:00+00:00","dateModified":"2025-05-26T17:58:16+00:00","breadcrumb":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/#primaryimage","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/1460x1095_blog_hero_react_server_components.webp","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/08\/1460x1095_blog_hero_react_server_components.webp","width":2190,"height":1643,"caption":"React Server Components: The Future of React Development"},{"@type":"BreadcrumbList","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/komponenty-serwera-react\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dhblog.dream.press\/blog\/"},{"@type":"ListItem","position":2,"name":"React Server Components: Przysz\u0142o\u015b\u0107 rozwoju React"}]},{"@type":"WebSite","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website","url":"https:\/\/www-dev.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www-dev.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www-dev.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/220faf2464d5ae08e41cf5f3b28fdc96","name":"Ian Hernandez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/04\/ian-hernandez-dreamhost-150x150.png","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/04\/ian-hernandez-dreamhost-150x150.png","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/04\/ian-hernandez-dreamhost-150x150.png","caption":"Ian Hernandez"},"description":"Ian is a Product Designer based in Los Angeles, California. He is responsible for driving brand and product design at DreamHost, developing and maintaining our internal design system, and writing frontend code when he can. In his free time, he enjoys walking his dog, learning history, and discovering new music online and irl. Connect with him on LinkedIn: https:\/\/www.linkedin.com\/in\/ianhernandez23\/","url":"https:\/\/www-dev.dreamhost.com\/blog\/author\/ianh\/"}]}},"lang":"pl","translations":{"pl":54981,"en":48940,"es":48920,"ru":50735,"pt":54931,"uk":54946,"de":54958,"it":68387,"fr":70369,"nl":70399},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/54981","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/1058"}],"replies":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/comments?post=54981"}],"version-history":[{"count":3,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/54981\/revisions"}],"predecessor-version":[{"id":59040,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/54981\/revisions\/59040"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/48941"}],"wp:attachment":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=54981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=54981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=54981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}