{"id":10045,"date":"2021-11-25T14:55:55","date_gmt":"2021-11-25T13:55:55","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/"},"modified":"2022-09-19T13:16:35","modified_gmt":"2022-09-19T11:16:35","slug":"frontend-thursday-vol-65-remix-1-0-ember-4-0","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/","title":{"rendered":"Frontend Thursday vol. 65 &#8211; Remix 1.0, Ember 4.0"},"content":{"rendered":"\n<h2 id=\"1-remix-v1\" data-num=1>1. Remix v1<\/h2>\n\n\n\n<p>Do niedawna zaciekle twierdzi\u0142em, \u017ce popularna opinia o codziennie pojawiaj\u0105cych si\u0119 JavaScriptowych frameworkach to krzywdz\u0105cy stereotyp, a nasze \u015brodowisko ostatnio mocno dojrza\u0142o. No c\u00f3\u017c\u2026 chyba b\u0119d\u0119 musia\u0142 zmieni\u0107 zdanie, bo w tym tygodniu znowu wydany zosta\u0142 nowy framework do Server Side Renderingu dla Reacta (przyp: dwa tygodnie temu wydany zosta\u0142 framework do SSR Hydrogen silnie integruj\u0105cy si\u0119 z Shopify. Wi\u0119cej o nim znajdziecie w <a href=\"https:\/\/vived.io\/frontend-thursday-vol-63-hydrogen-interactive-stories-user-flows-w-chrome-97\/\">Frontend Thurdsay vol. 63<\/a>). Nowy framework nazywa si\u0119 Remix i stworzyli go ludzie odpowiedzialni za bibliotek\u0119 React Router. Mogli\u015bcie ju\u017c wcze\u015bniej s\u0142ysze\u0107 t\u0105 nazw\u0119, bo wersja beta frameworku by\u0142a dost\u0119pna za odpowiedni\u0105 op\u0142at\u0105 (roczna op\u0142ata 250$ za indywidualn\u0105 licencj\u0119 lub 1000$ za licencj\u0119 zespo\u0142ow\u0105). Je\u015bli zastanawiacie si\u0119 co doprowadzi\u0142o do zmiany modelu biznesowego, to prawdopodobnie s\u0105 to 3 miliony dolar\u00f3w zainwestowane w firm\u0119 w ramach pierwszej rundy finansowania.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/5vh2jy.jpeg\" alt=\"\" class=\"wp-image-3273\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/5vh2jy.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/5vh2jy-300x300.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/5vh2jy-150x150.jpeg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n\n<p>Pora przyjrze\u0107 si\u0119 troch\u0119 temu co do zaoferowania ma Remix. Pierwsze co rzuca si\u0119 w oczy to fakt, \u017ce jest to rozwi\u0105zanie dedykowane do Server Side Renderingu i nie znajdziemy tu Static Site Generation czy Incremental Site Generation znanych z konkurencyjnych rozwi\u0105za\u0144. Na razie dokumentacja milczy r\u00f3wnie\u017c na temat coraz bardziej zyskuj\u0105cych na popularno\u015bci React Server Side Components.<\/p>\n\n\n\n<p>Routing jak si\u0119 pewnie domy\u015blacie oparty jest o najnowszy react-router. Co interesuj\u0105ce jest on skonfigurowany w taki spos\u00f3b, \u017ceby podobnie jak w Next.js \u015bcie\u017cki rozwija\u0107 na podstawie struktury katalog\u00f3w. Co jeszcze bardziej interesuj\u0105ce wspierane s\u0105 zagnie\u017cd\u017cone \u015bcie\u017cki podobne do tych znanych z Angulara, kt\u00f3re pozwalaj\u0105 minimalizowa\u0107 duplikacj\u0119 kodu.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"386\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/download.png\" alt=\"\" class=\"wp-image-3274\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/download.png 940w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/download-300x123.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/download-768x315.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption>Fragment z dokumentacji: z lewej struktura katalog\u00f3w, z prawej spos\u00f3b w jaki rozwijane s\u0105 \u015bcie\u017cki\u00a0<\/figcaption><\/figure><\/div>\n\n\n\n<p>W Remix z ka\u017cdego pliku eksportowane mog\u0105 by\u0107 2 rzeczy: domy\u015blna funkcja generuj\u0105ca komponent oraz funkcja loader, kt\u00f3ra odpowiedzialna jest za wczytanie danych. Funkcja loader uruchamiana jest po stronie serwera, a do pozyskanych przez ni\u0105 danych mo\u017cemy si\u0119 dosta\u0107 przez hook `useLoaderData()`<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">import { Link, useLoaderData } from &quot;remix&quot;;\n\n\/\/ params are automatically extracted from route\nexport let loader = async ({ params }) =&gt; {\n  return fetchPostsFromRemoteServer(params.slug);\n};\n\nexport default function Posts() {\n  let posts = useLoaderData&lt;Post[]&gt;();\n  return (\n    &lt;div&gt;\n      &lt;h1&gt;Posts&lt;\/h1&gt;\n      &lt;ul&gt;\n        {posts.map(post =&gt; (\n          &lt;li key={post.slug}&gt;\n            &lt;Link to={post.slug}&gt;{post.title}&lt;\/Link&gt;\n          &lt;\/li&gt;\n        ))}\n      &lt;\/ul&gt;\n    &lt;\/div&gt;\n  );\n}<\/code><\/pre>\n\n\n\n<p>Interesuj\u0105co wygl\u0105da te\u017c podej\u015bcie Remix do formularzy. Zamiast obs\u0142ugiwa\u0107 je z poziomu kodu uruchamianego z przegl\u0105darki klienta s\u0105 one wysy\u0142ane standardom POST\u2019em do serwera, kt\u00f3ry odpowiednio je przetwarza, a nast\u0119pnie zwraca b\u0142\u0105d lub nawiguje do odpowiedniej \u015bcie\u017cki w aplikacji. Endpoint przetwarzaj\u0105cy zapytania definiujemy eksportuj\u0105c funkcj\u0119 action.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">import { Form } from &quot;remix&quot;;\n\nexport let action = async ({ request }) =&gt; {\n  let formData = await request.formData();\n\n  let title = formData.get(&quot;title&quot;);\n  let slug = formData.get(&quot;slug&quot;);\n  let markdown = formData.get(&quot;markdown&quot;);\n\n  await createPost({ title, slug, markdown });\n\n  return redirect(&quot;\/admin&quot;);\n};\n\nexport default function NewPost() {\n  return (\n    &lt;Form method=&quot;post&quot;&gt;\n      &lt;p&gt;\n        &lt;label&gt;\n          Post Title: &lt;input type=&quot;text&quot; name=&quot;title&quot; \/&gt;\n        &lt;\/label&gt;\n      &lt;\/p&gt;\n      &lt;p&gt;\n        &lt;label&gt;\n          Post Slug: &lt;input type=&quot;text&quot; name=&quot;slug&quot; \/&gt;\n        &lt;\/label&gt;\n      &lt;\/p&gt;\n      &lt;p&gt;\n        &lt;label htmlFor=&quot;markdown&quot;&gt;Markdown&lt;\/label&gt;\n        &lt;br \/&gt;\n        &lt;textarea rows={20} name=&quot;markdown&quot; \/&gt;\n      &lt;\/p&gt;\n      &lt;p&gt;\n        &lt;button type=&quot;submit&quot;&gt;Create Post&lt;\/button&gt;\n      &lt;\/p&gt;\n    &lt;\/Form&gt;\n  );\n}<\/code><\/pre>\n\n\n\n<p>Na koniec warto jeszcze wspomnie\u0107, \u017ce Remix na ten moment nie oferuje wsparcia dla CSS Modules, co oznacza, \u017ce sami musimy zadba\u0107 o unikalno\u015b\u0107 klas w naszej aplikacji. Na szcz\u0119\u015bcie popularne rozwi\u0105zania takie jak Tailwind czy CSS-in-JS s\u0105 wspierane, wi\u0119c je\u015bli nie piszecie css-\u00f3w r\u0119cznie, to prawdopodobnie nawet nie zauwa\u017cycie tej niedogodno\u015bci.\u00a0<\/p>\n\n\n\n<p>Jaka jest moja opinia na temat Remix? Nie b\u0119dzie to najlepsze narz\u0119dzie do tworzenia wzgl\u0119dnie statycznych stron jak blog czy dokumentacja, ale im bardziej dynamiczna jest wasza aplikacja tym lepiej b\u0119dzie si\u0119 on sprawdza\u0142. Ci\u0119\u017cko powiedzie\u0107 czy na tym polu wypadnie lepiej ni\u017c Next.js czy Blitz. Czas poka\u017ce, ale dobrze widzie\u0107 tak zaci\u0119t\u0105 konkurencj\u0119 w temacie Server Side Renderingu.<\/p>\n\n\n\n<p>PS: Je\u015bli lubicie form\u0119 wideo to polecam kr\u00f3tki film przygotowany przez fireship.io, kt\u00f3ry w telegraficznym skr\u00f3cie pokazuje jak dzia\u0142a Remix<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Remix is a NEW JavaScript framework you MUST try\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/r4B69HAOXnA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/remix.run\/docs\/en\/v1\/tutorials\/blog\">https:\/\/remix.run\/docs\/en\/v1\/tutorials\/blog<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=r4B69HAOXnA\">https:\/\/www.youtube.com\/watch?v=r4B69HAOXnA<\/a><br><a href=\"https:\/\/news.ycombinator.com\/item?id=29312067\">https:\/\/news.ycombinator.com\/item?id=29312067<\/a><br><a href=\"https:\/\/www.reddit.com\/r\/javascript\/comments\/r0ea51\/v1_of_remix_is_officially_out\/\">https:\/\/www.reddit.com\/r\/javascript\/comments\/r0ea51\/v1_of_remix_is_officially_out\/<\/a><br>https:\/\/remix.run\/blog\/seed-funding-for-remix<\/p>\n\n\n\n<h2 id=\"2-vercel-zgarnia-kolejne-150-milionow-dolarow\" data-num=2>2. Vercel zgarnia kolejne 150 milion\u00f3w dolar\u00f3w<\/h2>\n\n\n\n<p>Gdybym tegorocznej jesieni mia\u0142 nada\u0107 jaki\u015b motyw tematyczny, to zdecydowanie by\u0142by to Server Side Rendering. Wszystko zacz\u0119\u0142o si\u0119 od wydania Next.js 12 i d\u0142ugo wyczekiwanej wersji Gatsby 4.0. Potem dostali\u015bmy Next.js 13 z wsparciem React Server Side Components, a w ostatnim miesi\u0105cu na rynku pojawi\u0142o si\u0119 dw\u00f3ch nowych graczy: Hydrogen i opisany dzisiaj Remix. Tematyczn\u0105 seri\u0119 zamyka na ten moment news o zebraniu 150 milion\u00f3w dolar\u00f3w przez Vercela &#8211; firm\u0119 matk\u0119 Next.js. Oj dzieje si\u0119 &#8211; je\u015bli jeszcze nie wskoczyli\u015bcie do tego poci\u0105gu podekscytowania to ostatni moment, \u017ceby to zrobi\u0107, bo wszystko wskazuje na to, \u017ce w nadchodz\u0105cym roku to w\u0142a\u015bnie b\u0119dzie najbardziej trenduj\u0105cy temat w \u015bwiecie frontendu.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-3275\" width=\"522\" height=\"294\"\/><figcaption>Poci\u0105g odje\u017cd\u017ca &#8211; wskakujcie!<\/figcaption><\/figure><\/div>\n\n\n\n<p>Wracaj\u0105c do tematu &#8211; zebrane pieni\u0105dze s\u0105 4 rund\u0105 finansowania firmy, kt\u00f3ra zgromadzi\u0142a do tej pory ju\u017c 313 milion\u00f3w dolar\u00f3w (3 miliony dolar\u00f3w dla Remix wygl\u0105daj\u0105 przy tej kwocie jako\u015b blado\u2026) i wyceniana jest na 2.5 miliarda dolar\u00f3w. Nowe \u015brodki maj\u0105 zosta\u0107 przeznaczone na rozw\u00f3j Open Source i funkcjonalno\u015bci zwi\u0105zanych z wprowadzonymi w Next.js 13 Edge Functions (przp: w du\u017cym uproszczeniu Edge Functions to takie lambdy odpalone na CDN, kt\u00f3rymi mo\u017cna przetwarza\u0107 zapytania u\u017cytkownika. Wi\u0119cej o nich przeczytacie w oficjalnej dokumentacji tutaj).<\/p>\n\n\n\n<p>Co interesuj\u0105ce poprzednia runda finansowania mia\u0142a miejsce zaledwie w czerwcu tego roku i opiewa\u0142a na 102 miliony dolar\u00f3w. To oznacza, \u017ce ponad \u2154 zebranego kapita\u0142u pochodzi z ostatnich 6 miesi\u0119cy. Ciekawa dyskusja w tym temacie toczy si\u0119 w dyskusji na Hacker News &#8211; jak wynika z raport\u00f3w mamy do czynienia z masowym inwestowaniem kapita\u0142u i gigantycznym wzrostem kwot z jakimi mamy do czynienia w rundach finansowania. Je\u015bli kiedykolwiek chcieli\u015bcie rzuci\u0107 wszystko i za\u0142o\u017cy\u0107 Startup to mo\u017ce by\u0107 w\u0142a\u015bnie ten moment.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-2.gif\" alt=\"\" class=\"wp-image-3276\" width=\"529\" height=\"295\"\/><figcaption>Ja mam tylko nadziej\u0119, \u017ce te 150 milion\u00f3w dolar\u00f3w to nie tylko na pensj\u0119 dla zatrudnionego niedawno Richa Harrisa &#8211; tw\u00f3rcy Svelte<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/vercel.com\/blog\/vercel-funding-series-d-and-valuation\">https:\/\/vercel.com\/blog\/vercel-funding-series-d-and-valuation<\/a><br>https:\/\/vercel.com\/docs\/concepts\/functions\/edge-functions<\/p>\n\n\n\n<h2 id=\"3-ember-4\" data-num=3>3. Ember 4<\/h2>\n\n\n\n<p>Troch\u0119 ponad tydzie\u0144 temu ukaza\u0142 si\u0119 Ember 4.0. Zgodnie z zapowiedziami z czerwcowego EmberConf w wersji tej znajdziemy kilka breaking changes, ale nie znajdziemy \u017cadnych nowych funkcjonalno\u015bci. Na te zgodnie z Road Map\u0105 poczeka\u0107 b\u0119dziemy musieli jeszcze do wersji 4.4 (mo\u017ce wtedy wreszcie wykrzesam z siebie wystarczaj\u0105co motywacji, \u017ceby przyjrze\u0107 si\u0119 Emberowi troch\u0119 bli\u017cej).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"270\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-3.gif\" alt=\"\" class=\"wp-image-3277\"\/><figcaption>Autor Frontendowych Czartk\u00f3w szukaj\u0105cy ciekawych zmian w Ember 4.0<\/figcaption><\/figure><\/div>\n\n\n\n<p>Nie podejm\u0119 si\u0119 opisania dla Was zmian, wi\u0119c wszystkich zainteresowanych odsy\u0142am do Release Notes na Githubie. Co ciekawe wydaniu nie towarzyszy\u0142 \u017caden blogpost i prawdopodobnie dlatego rozesz\u0142o si\u0119 one w sieci bez echa. Kto\u015b z Was korzysta jeszcze z Embera? Je\u015bli tak, to koniecznie podzielcie si\u0119 z nami wra\u017ceniami w komentarzach albo na naszym facebooku!<\/p>\n\n\n\n<p>Na zako\u0144czenie jeszcze moje standardowe Emberowe polecajki. Honeypot swego czasu przygotowa\u0142 \u015bwietny <a href=\"https:\/\/www.youtube.com\/watch?v=Cvz-9ccflKQ&amp;t=552s\">dokument na temat Embera<\/a>, je\u015bli jeszcze nie widzieli\u015bcie, to koniecznie musicie go nadrobi\u0107. Poza tym polecam przeczyta\u0107 <a href=\"https:\/\/simplabs.com\/blog\/2021\/03\/12\/ember.js-in-2021---a-beacon-of-productivity\/\">artyku\u0142<\/a> za\u0142o\u017cyciela simple labs, kt\u00f3ry twierdzi, \u017ce Ember to najbardziej produktywny framework na rynku i o dziwo nie wychodzi przy tym na osob\u0119 niespe\u0142na rozumu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/emberjs\/ember.js\/releases\/tag\/v4.0.0\">https:\/\/github.com\/emberjs\/ember.js\/releases\/tag\/v4.0.0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym tygodniu mamy dla Was nowy framework do SSR dla Reacta, nowego Embera i informacje o kolejnej rundzie finansowania Vercela.<\/p>\n","protected":false},"author":12,"featured_media":7752,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-10045","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"6","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0 - Vived<\/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:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0\" \/>\n<meta property=\"og:description\" content=\"W tym tygodniu mamy dla Was nowy framework do SSR dla Reacta, nowego Embera i informacje o kolejnej rundzie finansowania Vercela.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-25T13:55:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/Screenshot-2021-11-25-at-14.53.51.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1003\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Borowicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/Screenshot-2021-11-25-at-14.53.51.png\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 65 &#8211; Remix 1.0, Ember 4.0\",\"datePublished\":\"2021-11-25T13:55:55+00:00\",\"dateModified\":\"2022-09-19T11:16:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/\"},\"wordCount\":1172,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/\",\"name\":\"Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"datePublished\":\"2021-11-25T13:55:55+00:00\",\"dateModified\":\"2022-09-19T11:16:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"width\":2000,\"height\":1210},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 65 &#8211; Remix 1.0, Ember 4.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0 - Vived","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:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0","og_description":"W tym tygodniu mamy dla Was nowy framework do SSR dla Reacta, nowego Embera i informacje o kolejnej rundzie finansowania Vercela.","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/","og_site_name":"Vived","article_published_time":"2021-11-25T13:55:55+00:00","article_modified_time":"2022-09-19T11:16:35+00:00","og_image":[{"width":1920,"height":1003,"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/Screenshot-2021-11-25-at-14.53.51.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","twitter_title":"Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0","twitter_image":"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/Screenshot-2021-11-25-at-14.53.51.png","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 65 &#8211; Remix 1.0, Ember 4.0","datePublished":"2021-11-25T13:55:55+00:00","dateModified":"2022-09-19T11:16:35+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/"},"wordCount":1172,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/","name":"Frontend Thursday vol. 65 - Remix 1.0, Ember 4.0 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","datePublished":"2021-11-25T13:55:55+00:00","dateModified":"2022-09-19T11:16:35+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","width":2000,"height":1210},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-65-remix-1-0-ember-4-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 65 &#8211; Remix 1.0, Ember 4.0"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb","name":"Tomasz Borowicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","caption":"Tomasz Borowicz"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Remix v1<\/h2>\n","innerContent":["\n<h2>1. Remix v1<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Do niedawna zaciekle twierdzi\u0142em, \u017ce popularna opinia o codziennie pojawiaj\u0105cych si\u0119 JavaScriptowych frameworkach to krzywdz\u0105cy stereotyp, a nasze \u015brodowisko ostatnio mocno dojrza\u0142o. No c\u00f3\u017c\u2026 chyba b\u0119d\u0119 musia\u0142 zmieni\u0107 zdanie, bo w tym tygodniu znowu wydany zosta\u0142 nowy framework do Server Side Renderingu dla Reacta (przyp: dwa tygodnie temu wydany zosta\u0142 framework do SSR Hydrogen silnie integruj\u0105cy si\u0119 z Shopify. Wi\u0119cej o nim znajdziecie w <a href=\"https:\/\/vived.io\/frontend-thursday-vol-63-hydrogen-interactive-stories-user-flows-w-chrome-97\/\">Frontend Thurdsay vol. 63<\/a>). Nowy framework nazywa si\u0119 Remix i stworzyli go ludzie odpowiedzialni za bibliotek\u0119 React Router. Mogli\u015bcie ju\u017c wcze\u015bniej s\u0142ysze\u0107 t\u0105 nazw\u0119, bo wersja beta frameworku by\u0142a dost\u0119pna za odpowiedni\u0105 op\u0142at\u0105 (roczna op\u0142ata 250$ za indywidualn\u0105 licencj\u0119 lub 1000$ za licencj\u0119 zespo\u0142ow\u0105). Je\u015bli zastanawiacie si\u0119 co doprowadzi\u0142o do zmiany modelu biznesowego, to prawdopodobnie s\u0105 to 3 miliony dolar\u00f3w zainwestowane w firm\u0119 w ramach pierwszej rundy finansowania.<\/p>\n","innerContent":["\n<p>Do niedawna zaciekle twierdzi\u0142em, \u017ce popularna opinia o codziennie pojawiaj\u0105cych si\u0119 JavaScriptowych frameworkach to krzywdz\u0105cy stereotyp, a nasze \u015brodowisko ostatnio mocno dojrza\u0142o. No c\u00f3\u017c\u2026 chyba b\u0119d\u0119 musia\u0142 zmieni\u0107 zdanie, bo w tym tygodniu znowu wydany zosta\u0142 nowy framework do Server Side Renderingu dla Reacta (przyp: dwa tygodnie temu wydany zosta\u0142 framework do SSR Hydrogen silnie integruj\u0105cy si\u0119 z Shopify. Wi\u0119cej o nim znajdziecie w <a href=\"https:\/\/vived.io\/frontend-thursday-vol-63-hydrogen-interactive-stories-user-flows-w-chrome-97\/\">Frontend Thurdsay vol. 63<\/a>). Nowy framework nazywa si\u0119 Remix i stworzyli go ludzie odpowiedzialni za bibliotek\u0119 React Router. Mogli\u015bcie ju\u017c wcze\u015bniej s\u0142ysze\u0107 t\u0105 nazw\u0119, bo wersja beta frameworku by\u0142a dost\u0119pna za odpowiedni\u0105 op\u0142at\u0105 (roczna op\u0142ata 250$ za indywidualn\u0105 licencj\u0119 lub 1000$ za licencj\u0119 zespo\u0142ow\u0105). Je\u015bli zastanawiacie si\u0119 co doprowadzi\u0142o do zmiany modelu biznesowego, to prawdopodobnie s\u0105 to 3 miliony dolar\u00f3w zainwestowane w firm\u0119 w ramach pierwszej rundy finansowania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3273,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/5vh2jy.jpeg\" alt=\"\" class=\"wp-image-3273\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/5vh2jy.jpeg\" alt=\"\" class=\"wp-image-3273\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pora przyjrze\u0107 si\u0119 troch\u0119 temu co do zaoferowania ma Remix. Pierwsze co rzuca si\u0119 w oczy to fakt, \u017ce jest to rozwi\u0105zanie dedykowane do Server Side Renderingu i nie znajdziemy tu Static Site Generation czy Incremental Site Generation znanych z konkurencyjnych rozwi\u0105za\u0144. Na razie dokumentacja milczy r\u00f3wnie\u017c na temat coraz bardziej zyskuj\u0105cych na popularno\u015bci React Server Side Components.<\/p>\n","innerContent":["\n<p>Pora przyjrze\u0107 si\u0119 troch\u0119 temu co do zaoferowania ma Remix. Pierwsze co rzuca si\u0119 w oczy to fakt, \u017ce jest to rozwi\u0105zanie dedykowane do Server Side Renderingu i nie znajdziemy tu Static Site Generation czy Incremental Site Generation znanych z konkurencyjnych rozwi\u0105za\u0144. Na razie dokumentacja milczy r\u00f3wnie\u017c na temat coraz bardziej zyskuj\u0105cych na popularno\u015bci React Server Side Components.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Routing jak si\u0119 pewnie domy\u015blacie oparty jest o najnowszy react-router. Co interesuj\u0105ce jest on skonfigurowany w taki spos\u00f3b, \u017ceby podobnie jak w Next.js \u015bcie\u017cki rozwija\u0107 na podstawie struktury katalog\u00f3w. Co jeszcze bardziej interesuj\u0105ce wspierane s\u0105 zagnie\u017cd\u017cone \u015bcie\u017cki podobne do tych znanych z Angulara, kt\u00f3re pozwalaj\u0105 minimalizowa\u0107 duplikacj\u0119 kodu.<\/p>\n","innerContent":["\n<p>Routing jak si\u0119 pewnie domy\u015blacie oparty jest o najnowszy react-router. Co interesuj\u0105ce jest on skonfigurowany w taki spos\u00f3b, \u017ceby podobnie jak w Next.js \u015bcie\u017cki rozwija\u0107 na podstawie struktury katalog\u00f3w. Co jeszcze bardziej interesuj\u0105ce wspierane s\u0105 zagnie\u017cd\u017cone \u015bcie\u017cki podobne do tych znanych z Angulara, kt\u00f3re pozwalaj\u0105 minimalizowa\u0107 duplikacj\u0119 kodu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3274,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/download.png\" alt=\"\" class=\"wp-image-3274\"\/><figcaption>Fragment z dokumentacji: z lewej struktura katalog\u00f3w, z prawej spos\u00f3b w jaki rozwijane s\u0105 \u015bcie\u017cki\u00a0<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/download.png\" alt=\"\" class=\"wp-image-3274\"\/><figcaption>Fragment z dokumentacji: z lewej struktura katalog\u00f3w, z prawej spos\u00f3b w jaki rozwijane s\u0105 \u015bcie\u017cki\u00a0<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W Remix z ka\u017cdego pliku eksportowane mog\u0105 by\u0107 2 rzeczy: domy\u015blna funkcja generuj\u0105ca komponent oraz funkcja loader, kt\u00f3ra odpowiedzialna jest za wczytanie danych. Funkcja loader uruchamiana jest po stronie serwera, a do pozyskanych przez ni\u0105 danych mo\u017cemy si\u0119 dosta\u0107 przez hook `useLoaderData()`<\/p>\n","innerContent":["\n<p>W Remix z ka\u017cdego pliku eksportowane mog\u0105 by\u0107 2 rzeczy: domy\u015blna funkcja generuj\u0105ca komponent oraz funkcja loader, kt\u00f3ra odpowiedzialna jest za wczytanie danych. Funkcja loader uruchamiana jest po stronie serwera, a do pozyskanych przez ni\u0105 danych mo\u017cemy si\u0119 dosta\u0107 przez hook `useLoaderData()`<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">import { Link, useLoaderData } from \"remix\";\n\n\/\/ params are automatically extracted from route\nexport let loader = async ({ params }) => {\n  return fetchPostsFromRemoteServer(params.slug);\n};\n\nexport default function Posts() {\n  let posts = useLoaderData&lt;Post[]>();\n  return (\n    &lt;div>\n      &lt;h1>Posts&lt;\/h1>\n      &lt;ul>\n        {posts.map(post => (\n          &lt;li key={post.slug}>\n            &lt;Link to={post.slug}>{post.title}&lt;\/Link>\n          &lt;\/li>\n        ))}\n      &lt;\/ul>\n    &lt;\/div>\n  );\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">import { Link, useLoaderData } from \"remix\";\n\n\/\/ params are automatically extracted from route\nexport let loader = async ({ params }) => {\n  return fetchPostsFromRemoteServer(params.slug);\n};\n\nexport default function Posts() {\n  let posts = useLoaderData&lt;Post[]>();\n  return (\n    &lt;div>\n      &lt;h1>Posts&lt;\/h1>\n      &lt;ul>\n        {posts.map(post => (\n          &lt;li key={post.slug}>\n            &lt;Link to={post.slug}>{post.title}&lt;\/Link>\n          &lt;\/li>\n        ))}\n      &lt;\/ul>\n    &lt;\/div>\n  );\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Interesuj\u0105co wygl\u0105da te\u017c podej\u015bcie Remix do formularzy. Zamiast obs\u0142ugiwa\u0107 je z poziomu kodu uruchamianego z przegl\u0105darki klienta s\u0105 one wysy\u0142ane standardom POST\u2019em do serwera, kt\u00f3ry odpowiednio je przetwarza, a nast\u0119pnie zwraca b\u0142\u0105d lub nawiguje do odpowiedniej \u015bcie\u017cki w aplikacji. Endpoint przetwarzaj\u0105cy zapytania definiujemy eksportuj\u0105c funkcj\u0119 action.<\/p>\n","innerContent":["\n<p>Interesuj\u0105co wygl\u0105da te\u017c podej\u015bcie Remix do formularzy. Zamiast obs\u0142ugiwa\u0107 je z poziomu kodu uruchamianego z przegl\u0105darki klienta s\u0105 one wysy\u0142ane standardom POST\u2019em do serwera, kt\u00f3ry odpowiednio je przetwarza, a nast\u0119pnie zwraca b\u0142\u0105d lub nawiguje do odpowiedniej \u015bcie\u017cki w aplikacji. Endpoint przetwarzaj\u0105cy zapytania definiujemy eksportuj\u0105c funkcj\u0119 action.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">import { Form } from \"remix\";\n\nexport let action = async ({ request }) => {\n  let formData = await request.formData();\n\n  let title = formData.get(\"title\");\n  let slug = formData.get(\"slug\");\n  let markdown = formData.get(\"markdown\");\n\n  await createPost({ title, slug, markdown });\n\n  return redirect(\"\/admin\");\n};\n\nexport default function NewPost() {\n  return (\n    &lt;Form method=\"post\">\n      &lt;p>\n        &lt;label>\n          Post Title: &lt;input type=\"text\" name=\"title\" \/>\n        &lt;\/label>\n      &lt;\/p>\n      &lt;p>\n        &lt;label>\n          Post Slug: &lt;input type=\"text\" name=\"slug\" \/>\n        &lt;\/label>\n      &lt;\/p>\n      &lt;p>\n        &lt;label htmlFor=\"markdown\">Markdown&lt;\/label>\n        &lt;br \/>\n        &lt;textarea rows={20} name=\"markdown\" \/>\n      &lt;\/p>\n      &lt;p>\n        &lt;button type=\"submit\">Create Post&lt;\/button>\n      &lt;\/p>\n    &lt;\/Form>\n  );\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">import { Form } from \"remix\";\n\nexport let action = async ({ request }) => {\n  let formData = await request.formData();\n\n  let title = formData.get(\"title\");\n  let slug = formData.get(\"slug\");\n  let markdown = formData.get(\"markdown\");\n\n  await createPost({ title, slug, markdown });\n\n  return redirect(\"\/admin\");\n};\n\nexport default function NewPost() {\n  return (\n    &lt;Form method=\"post\">\n      &lt;p>\n        &lt;label>\n          Post Title: &lt;input type=\"text\" name=\"title\" \/>\n        &lt;\/label>\n      &lt;\/p>\n      &lt;p>\n        &lt;label>\n          Post Slug: &lt;input type=\"text\" name=\"slug\" \/>\n        &lt;\/label>\n      &lt;\/p>\n      &lt;p>\n        &lt;label htmlFor=\"markdown\">Markdown&lt;\/label>\n        &lt;br \/>\n        &lt;textarea rows={20} name=\"markdown\" \/>\n      &lt;\/p>\n      &lt;p>\n        &lt;button type=\"submit\">Create Post&lt;\/button>\n      &lt;\/p>\n    &lt;\/Form>\n  );\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na koniec warto jeszcze wspomnie\u0107, \u017ce Remix na ten moment nie oferuje wsparcia dla CSS Modules, co oznacza, \u017ce sami musimy zadba\u0107 o unikalno\u015b\u0107 klas w naszej aplikacji. Na szcz\u0119\u015bcie popularne rozwi\u0105zania takie jak Tailwind czy CSS-in-JS s\u0105 wspierane, wi\u0119c je\u015bli nie piszecie css-\u00f3w r\u0119cznie, to prawdopodobnie nawet nie zauwa\u017cycie tej niedogodno\u015bci.\u00a0<\/p>\n","innerContent":["\n<p>Na koniec warto jeszcze wspomnie\u0107, \u017ce Remix na ten moment nie oferuje wsparcia dla CSS Modules, co oznacza, \u017ce sami musimy zadba\u0107 o unikalno\u015b\u0107 klas w naszej aplikacji. Na szcz\u0119\u015bcie popularne rozwi\u0105zania takie jak Tailwind czy CSS-in-JS s\u0105 wspierane, wi\u0119c je\u015bli nie piszecie css-\u00f3w r\u0119cznie, to prawdopodobnie nawet nie zauwa\u017cycie tej niedogodno\u015bci.\u00a0<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jaka jest moja opinia na temat Remix? Nie b\u0119dzie to najlepsze narz\u0119dzie do tworzenia wzgl\u0119dnie statycznych stron jak blog czy dokumentacja, ale im bardziej dynamiczna jest wasza aplikacja tym lepiej b\u0119dzie si\u0119 on sprawdza\u0142. Ci\u0119\u017cko powiedzie\u0107 czy na tym polu wypadnie lepiej ni\u017c Next.js czy Blitz. Czas poka\u017ce, ale dobrze widzie\u0107 tak zaci\u0119t\u0105 konkurencj\u0119 w temacie Server Side Renderingu.<\/p>\n","innerContent":["\n<p>Jaka jest moja opinia na temat Remix? Nie b\u0119dzie to najlepsze narz\u0119dzie do tworzenia wzgl\u0119dnie statycznych stron jak blog czy dokumentacja, ale im bardziej dynamiczna jest wasza aplikacja tym lepiej b\u0119dzie si\u0119 on sprawdza\u0142. Ci\u0119\u017cko powiedzie\u0107 czy na tym polu wypadnie lepiej ni\u017c Next.js czy Blitz. Czas poka\u017ce, ale dobrze widzie\u0107 tak zaci\u0119t\u0105 konkurencj\u0119 w temacie Server Side Renderingu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: Je\u015bli lubicie form\u0119 wideo to polecam kr\u00f3tki film przygotowany przez fireship.io, kt\u00f3ry w telegraficznym skr\u00f3cie pokazuje jak dzia\u0142a Remix<\/p>\n","innerContent":["\n<p>PS: Je\u015bli lubicie form\u0119 wideo to polecam kr\u00f3tki film przygotowany przez fireship.io, kt\u00f3ry w telegraficznym skr\u00f3cie pokazuje jak dzia\u0142a Remix<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=r4B69HAOXnA","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=r4B69HAOXnA\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=r4B69HAOXnA\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/remix.run\/docs\/en\/v1\/tutorials\/blog\">https:\/\/remix.run\/docs\/en\/v1\/tutorials\/blog<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=r4B69HAOXnA\">https:\/\/www.youtube.com\/watch?v=r4B69HAOXnA<\/a><br><a href=\"https:\/\/news.ycombinator.com\/item?id=29312067\">https:\/\/news.ycombinator.com\/item?id=29312067<\/a><br><a href=\"https:\/\/www.reddit.com\/r\/javascript\/comments\/r0ea51\/v1_of_remix_is_officially_out\/\">https:\/\/www.reddit.com\/r\/javascript\/comments\/r0ea51\/v1_of_remix_is_officially_out\/<\/a><br>https:\/\/remix.run\/blog\/seed-funding-for-remix<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/remix.run\/docs\/en\/v1\/tutorials\/blog\">https:\/\/remix.run\/docs\/en\/v1\/tutorials\/blog<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=r4B69HAOXnA\">https:\/\/www.youtube.com\/watch?v=r4B69HAOXnA<\/a><br><a href=\"https:\/\/news.ycombinator.com\/item?id=29312067\">https:\/\/news.ycombinator.com\/item?id=29312067<\/a><br><a href=\"https:\/\/www.reddit.com\/r\/javascript\/comments\/r0ea51\/v1_of_remix_is_officially_out\/\">https:\/\/www.reddit.com\/r\/javascript\/comments\/r0ea51\/v1_of_remix_is_officially_out\/<\/a><br>https:\/\/remix.run\/blog\/seed-funding-for-remix<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Vercel zgarnia kolejne 150 milion\u00f3w dolar\u00f3w<\/h2>\n","innerContent":["\n<h2>2. Vercel zgarnia kolejne 150 milion\u00f3w dolar\u00f3w<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Gdybym tegorocznej jesieni mia\u0142 nada\u0107 jaki\u015b motyw tematyczny, to zdecydowanie by\u0142by to Server Side Rendering. Wszystko zacz\u0119\u0142o si\u0119 od wydania Next.js 12 i d\u0142ugo wyczekiwanej wersji Gatsby 4.0. Potem dostali\u015bmy Next.js 13 z wsparciem React Server Side Components, a w ostatnim miesi\u0105cu na rynku pojawi\u0142o si\u0119 dw\u00f3ch nowych graczy: Hydrogen i opisany dzisiaj Remix. Tematyczn\u0105 seri\u0119 zamyka na ten moment news o zebraniu 150 milion\u00f3w dolar\u00f3w przez Vercela - firm\u0119 matk\u0119 Next.js. Oj dzieje si\u0119 - je\u015bli jeszcze nie wskoczyli\u015bcie do tego poci\u0105gu podekscytowania to ostatni moment, \u017ceby to zrobi\u0107, bo wszystko wskazuje na to, \u017ce w nadchodz\u0105cym roku to w\u0142a\u015bnie b\u0119dzie najbardziej trenduj\u0105cy temat w \u015bwiecie frontendu.<\/p>\n","innerContent":["\n<p>Gdybym tegorocznej jesieni mia\u0142 nada\u0107 jaki\u015b motyw tematyczny, to zdecydowanie by\u0142by to Server Side Rendering. Wszystko zacz\u0119\u0142o si\u0119 od wydania Next.js 12 i d\u0142ugo wyczekiwanej wersji Gatsby 4.0. Potem dostali\u015bmy Next.js 13 z wsparciem React Server Side Components, a w ostatnim miesi\u0105cu na rynku pojawi\u0142o si\u0119 dw\u00f3ch nowych graczy: Hydrogen i opisany dzisiaj Remix. Tematyczn\u0105 seri\u0119 zamyka na ten moment news o zebraniu 150 milion\u00f3w dolar\u00f3w przez Vercela - firm\u0119 matk\u0119 Next.js. Oj dzieje si\u0119 - je\u015bli jeszcze nie wskoczyli\u015bcie do tego poci\u0105gu podekscytowania to ostatni moment, \u017ceby to zrobi\u0107, bo wszystko wskazuje na to, \u017ce w nadchodz\u0105cym roku to w\u0142a\u015bnie b\u0119dzie najbardziej trenduj\u0105cy temat w \u015bwiecie frontendu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3275,"width":522,"height":294,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-3275\" width=\"522\" height=\"294\"\/><figcaption>Poci\u0105g odje\u017cd\u017ca - wskakujcie!<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-3275\" width=\"522\" height=\"294\"\/><figcaption>Poci\u0105g odje\u017cd\u017ca - wskakujcie!<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wracaj\u0105c do tematu - zebrane pieni\u0105dze s\u0105 4 rund\u0105 finansowania firmy, kt\u00f3ra zgromadzi\u0142a do tej pory ju\u017c 313 milion\u00f3w dolar\u00f3w (3 miliony dolar\u00f3w dla Remix wygl\u0105daj\u0105 przy tej kwocie jako\u015b blado\u2026) i wyceniana jest na 2.5 miliarda dolar\u00f3w. Nowe \u015brodki maj\u0105 zosta\u0107 przeznaczone na rozw\u00f3j Open Source i funkcjonalno\u015bci zwi\u0105zanych z wprowadzonymi w Next.js 13 Edge Functions (przp: w du\u017cym uproszczeniu Edge Functions to takie lambdy odpalone na CDN, kt\u00f3rymi mo\u017cna przetwarza\u0107 zapytania u\u017cytkownika. Wi\u0119cej o nich przeczytacie w oficjalnej dokumentacji tutaj).<\/p>\n","innerContent":["\n<p>Wracaj\u0105c do tematu - zebrane pieni\u0105dze s\u0105 4 rund\u0105 finansowania firmy, kt\u00f3ra zgromadzi\u0142a do tej pory ju\u017c 313 milion\u00f3w dolar\u00f3w (3 miliony dolar\u00f3w dla Remix wygl\u0105daj\u0105 przy tej kwocie jako\u015b blado\u2026) i wyceniana jest na 2.5 miliarda dolar\u00f3w. Nowe \u015brodki maj\u0105 zosta\u0107 przeznaczone na rozw\u00f3j Open Source i funkcjonalno\u015bci zwi\u0105zanych z wprowadzonymi w Next.js 13 Edge Functions (przp: w du\u017cym uproszczeniu Edge Functions to takie lambdy odpalone na CDN, kt\u00f3rymi mo\u017cna przetwarza\u0107 zapytania u\u017cytkownika. Wi\u0119cej o nich przeczytacie w oficjalnej dokumentacji tutaj).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co interesuj\u0105ce poprzednia runda finansowania mia\u0142a miejsce zaledwie w czerwcu tego roku i opiewa\u0142a na 102 miliony dolar\u00f3w. To oznacza, \u017ce ponad \u2154 zebranego kapita\u0142u pochodzi z ostatnich 6 miesi\u0119cy. Ciekawa dyskusja w tym temacie toczy si\u0119 w dyskusji na Hacker News - jak wynika z raport\u00f3w mamy do czynienia z masowym inwestowaniem kapita\u0142u i gigantycznym wzrostem kwot z jakimi mamy do czynienia w rundach finansowania. Je\u015bli kiedykolwiek chcieli\u015bcie rzuci\u0107 wszystko i za\u0142o\u017cy\u0107 Startup to mo\u017ce by\u0107 w\u0142a\u015bnie ten moment.<\/p>\n","innerContent":["\n<p>Co interesuj\u0105ce poprzednia runda finansowania mia\u0142a miejsce zaledwie w czerwcu tego roku i opiewa\u0142a na 102 miliony dolar\u00f3w. To oznacza, \u017ce ponad \u2154 zebranego kapita\u0142u pochodzi z ostatnich 6 miesi\u0119cy. Ciekawa dyskusja w tym temacie toczy si\u0119 w dyskusji na Hacker News - jak wynika z raport\u00f3w mamy do czynienia z masowym inwestowaniem kapita\u0142u i gigantycznym wzrostem kwot z jakimi mamy do czynienia w rundach finansowania. Je\u015bli kiedykolwiek chcieli\u015bcie rzuci\u0107 wszystko i za\u0142o\u017cy\u0107 Startup to mo\u017ce by\u0107 w\u0142a\u015bnie ten moment.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3276,"width":529,"height":295,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-2.gif\" alt=\"\" class=\"wp-image-3276\" width=\"529\" height=\"295\"\/><figcaption>Ja mam tylko nadziej\u0119, \u017ce te 150 milion\u00f3w dolar\u00f3w to nie tylko na pensj\u0119 dla zatrudnionego niedawno Richa Harrisa - tw\u00f3rcy Svelte<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-2.gif\" alt=\"\" class=\"wp-image-3276\" width=\"529\" height=\"295\"\/><figcaption>Ja mam tylko nadziej\u0119, \u017ce te 150 milion\u00f3w dolar\u00f3w to nie tylko na pensj\u0119 dla zatrudnionego niedawno Richa Harrisa - tw\u00f3rcy Svelte<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/vercel.com\/blog\/vercel-funding-series-d-and-valuation\">https:\/\/vercel.com\/blog\/vercel-funding-series-d-and-valuation<\/a><br>https:\/\/vercel.com\/docs\/concepts\/functions\/edge-functions<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/vercel.com\/blog\/vercel-funding-series-d-and-valuation\">https:\/\/vercel.com\/blog\/vercel-funding-series-d-and-valuation<\/a><br>https:\/\/vercel.com\/docs\/concepts\/functions\/edge-functions<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Ember 4<\/h2>\n","innerContent":["\n<h2>3. Ember 4<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Troch\u0119 ponad tydzie\u0144 temu ukaza\u0142 si\u0119 Ember 4.0. Zgodnie z zapowiedziami z czerwcowego EmberConf w wersji tej znajdziemy kilka breaking changes, ale nie znajdziemy \u017cadnych nowych funkcjonalno\u015bci. Na te zgodnie z Road Map\u0105 poczeka\u0107 b\u0119dziemy musieli jeszcze do wersji 4.4 (mo\u017ce wtedy wreszcie wykrzesam z siebie wystarczaj\u0105co motywacji, \u017ceby przyjrze\u0107 si\u0119 Emberowi troch\u0119 bli\u017cej).<\/p>\n","innerContent":["\n<p>Troch\u0119 ponad tydzie\u0144 temu ukaza\u0142 si\u0119 Ember 4.0. Zgodnie z zapowiedziami z czerwcowego EmberConf w wersji tej znajdziemy kilka breaking changes, ale nie znajdziemy \u017cadnych nowych funkcjonalno\u015bci. Na te zgodnie z Road Map\u0105 poczeka\u0107 b\u0119dziemy musieli jeszcze do wersji 4.4 (mo\u017ce wtedy wreszcie wykrzesam z siebie wystarczaj\u0105co motywacji, \u017ceby przyjrze\u0107 si\u0119 Emberowi troch\u0119 bli\u017cej).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3277,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-3.gif\" alt=\"\" class=\"wp-image-3277\"\/><figcaption>Autor Frontendowych Czartk\u00f3w szukaj\u0105cy ciekawych zmian w Ember 4.0<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-3.gif\" alt=\"\" class=\"wp-image-3277\"\/><figcaption>Autor Frontendowych Czartk\u00f3w szukaj\u0105cy ciekawych zmian w Ember 4.0<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie podejm\u0119 si\u0119 opisania dla Was zmian, wi\u0119c wszystkich zainteresowanych odsy\u0142am do Release Notes na Githubie. Co ciekawe wydaniu nie towarzyszy\u0142 \u017caden blogpost i prawdopodobnie dlatego rozesz\u0142o si\u0119 one w sieci bez echa. Kto\u015b z Was korzysta jeszcze z Embera? Je\u015bli tak, to koniecznie podzielcie si\u0119 z nami wra\u017ceniami w komentarzach albo na naszym facebooku!<\/p>\n","innerContent":["\n<p>Nie podejm\u0119 si\u0119 opisania dla Was zmian, wi\u0119c wszystkich zainteresowanych odsy\u0142am do Release Notes na Githubie. Co ciekawe wydaniu nie towarzyszy\u0142 \u017caden blogpost i prawdopodobnie dlatego rozesz\u0142o si\u0119 one w sieci bez echa. Kto\u015b z Was korzysta jeszcze z Embera? Je\u015bli tak, to koniecznie podzielcie si\u0119 z nami wra\u017ceniami w komentarzach albo na naszym facebooku!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na zako\u0144czenie jeszcze moje standardowe Emberowe polecajki. Honeypot swego czasu przygotowa\u0142 \u015bwietny <a href=\"https:\/\/www.youtube.com\/watch?v=Cvz-9ccflKQ&amp;t=552s\">dokument na temat Embera<\/a>, je\u015bli jeszcze nie widzieli\u015bcie, to koniecznie musicie go nadrobi\u0107. Poza tym polecam przeczyta\u0107 <a href=\"https:\/\/simplabs.com\/blog\/2021\/03\/12\/ember.js-in-2021---a-beacon-of-productivity\/\">artyku\u0142<\/a> za\u0142o\u017cyciela simple labs, kt\u00f3ry twierdzi, \u017ce Ember to najbardziej produktywny framework na rynku i o dziwo nie wychodzi przy tym na osob\u0119 niespe\u0142na rozumu.<\/p>\n","innerContent":["\n<p>Na zako\u0144czenie jeszcze moje standardowe Emberowe polecajki. Honeypot swego czasu przygotowa\u0142 \u015bwietny <a href=\"https:\/\/www.youtube.com\/watch?v=Cvz-9ccflKQ&amp;t=552s\">dokument na temat Embera<\/a>, je\u015bli jeszcze nie widzieli\u015bcie, to koniecznie musicie go nadrobi\u0107. Poza tym polecam przeczyta\u0107 <a href=\"https:\/\/simplabs.com\/blog\/2021\/03\/12\/ember.js-in-2021---a-beacon-of-productivity\/\">artyku\u0142<\/a> za\u0142o\u017cyciela simple labs, kt\u00f3ry twierdzi, \u017ce Ember to najbardziej produktywny framework na rynku i o dziwo nie wychodzi przy tym na osob\u0119 niespe\u0142na rozumu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/emberjs\/ember.js\/releases\/tag\/v4.0.0\">https:\/\/github.com\/emberjs\/ember.js\/releases\/tag\/v4.0.0<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/emberjs\/ember.js\/releases\/tag\/v4.0.0\">https:\/\/github.com\/emberjs\/ember.js\/releases\/tag\/v4.0.0<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=10045"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10045\/revisions"}],"predecessor-version":[{"id":10612,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10045\/revisions\/10612"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/7752"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}