{"id":15435,"date":"2023-03-31T16:55:03","date_gmt":"2023-03-31T14:55:03","guid":{"rendered":"https:\/\/vived.io\/?p=15435"},"modified":"2023-03-31T16:55:06","modified_gmt":"2023-03-31T14:55:06","slug":"nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/","title":{"rendered":"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131"},"content":{"rendered":"\n<h2 id=\"1-nad-czym-pracuje-zespol-reacta\" data-num=1>1. Nad czym pracuje zesp\u00f3\u0142 Reacta?<\/h2>\n\n\n\n<p>W minionym tygodniu zesp\u00f3\u0142 Reacta podzieli\u0142 si\u0119 z nami <a href=\"https:\/\/react.dev\/blog\/2023\/03\/22\/react-labs-what-we-have-been-working-on-march-2023\" target=\"_blank\" rel=\"noreferrer noopener\">zbiorczym podsumowaniem wszystkich inicjatyw maj\u0105cych miejsce w projekcie<\/a>. Notatka naprawd\u0119 nie jest d\u0142uga, dlatego ka\u017cdemu polcam przeczyta\u0107 j\u0105 osobi\u015bcie. Natomiast dla wszystkich zbyt zaj\u0119tych przed\u015bwi\u0105tecznymi przygotowaniami mamy kr\u00f3tkie podsumowanie najwa\u017cniejszych podpunkt\u00f3w.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>React Server Components to nowa architekura nad kt\u00f3r\u0105 zesp\u00f3\u0142 pracuje ju\u017c od 2020 roku. Nadal s\u0105 one w fazie bety, ale obecnie s\u0105 g\u0142\u00f3wnym priorytetem zespo\u0142u. Z React Server Components mo\u017cemy korzysta\u0107 ju\u017c na przyk\u0142ad w Next.js czy Gatsby. Je\u015bli chcecie nadrobi\u0107 temat React Server Components, to najlepszym \u017ar\u00f3d\u0142em b\u0119dzie artyku\u0142 opublikowany na blogu Plasmic <a href=\"https:\/\/www.plasmic.app\/blog\/how-react-server-components-work\" target=\"_blank\" rel=\"noreferrer noopener\">&#8222;How React server components work: an in-depth guide&#8221;<\/a>.<\/li>\n\n\n\n<li>Od czasu publikacji ostatniej aktualizacji, ustabilizowana zosta\u0142a konwencja oznaczania serwerowych oraz klienckich komponent\u00f3w. Zamiast rozszerze\u0144 <code>.server.tsx<\/code> i <code>.client.tsx<\/code> u\u017cywa\u0107 b\u0119dziemy shebang <code>use client<\/code> i <code>use server<\/code>. <\/li>\n\n\n\n<li>Do przodu posun\u0119\u0142y si\u0119 r\u00f3wnie\u017c prace nad RFC dotycz\u0105cym obs\u0142ugi async\/await. Serwerowe komponenty b\u0119d\u0105 mog\u0142y bezpo\u015brednio korzysta\u0107 z sk\u0142adni JavaScript, natomiast komponenty klienckie b\u0119da mog\u0142y odpakowa\u0107 Promisy przy pomocy nowego hooka <code>use(Promise)<\/code>. Wi\u0119cej o tym jak b\u0119dzie dzia\u0142a\u0142 nowy hook mo\u017cecie przeczyta\u0107 w <a href=\"https:\/\/vived.io\/new-hook-is-coming-to-react-frontend-weekly-vol-109\/\" target=\"_blank\" rel=\"noreferrer noopener\">109 edycji naszego przegl\u0105du<\/a>.<\/li>\n\n\n\n<li>Najwi\u0119ksz\u0105 nowo\u015bci\u0105 dotycz\u0105c\u0105 React Server Components s\u0105 prace nad Server Actions. Umo\u017cliwi\u0105 one klienckim komponentom wykonywanie operacji bezpo\u015brednio na serwerze. Szczeg\u00f3\u0142owego RFC mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n\n\n\n<li>Zesp\u00f3\u0142 aktualnie pracuje nad integracj\u0105 komponentu <code>&lt;Suspense \/&gt;<\/code> z \u0142adowaniem zasob\u00f3w &#8211; np. plik\u00f3w CSS i zewn\u0119trznych skrypt\u00f3w. Szczeg\u00f3\u0142owego RFC mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n\n\n\n<li>Kolejn\u0105 funkcjonalno\u015bci\u0105 nad kt\u00f3r\u0105 aktualnie pracuje zesp\u00f3\u0142 jest obs\u0142uga <code>&lt;title&gt;<\/code> i <code>&lt;meta&gt;<\/code>. Co prawda obecnie istniej\u0105 rozwi\u0105zania umo\u017cliwiaj\u0105ce manipulacj\u0119 tymi parametrami (np. <a href=\"https:\/\/www.npmjs.com\/package\/helmet\" target=\"_blank\" rel=\"noreferrer noopener\">Helmet<\/a>), ale wymagaj\u0105 one wyrenderowania ca\u0142ej aplikacji po stronie serwera. Takie zachowanie k\u0142\u00f3ci si\u0119 z ide\u0105 React Server Components i z tego powodu zesp\u00f3\u0142 zdecydowa\u0142 si\u0119 przygotowa\u0107 specjalne API wbudowane w bibliotek\u0119. Szczeg\u00f3\u0142owego RFC r\u00f3wnie\u017c mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n\n\n\n<li>React Forget to zapowiedziany w 2021 kompilator, kt\u00f3ry ma automatycznie zajmowa\u0107 si\u0119 memonizacj\u0105 (<code>useCallback<\/code> i <code>useMemo<\/code>). Prace nad kompilatorem znacz\u0105co si\u0119 przed\u0142u\u017cy\u0142y, ale jest on ju\u017c u\u017cywany w pierwszych projektach wewn\u0105trz Mety. Kiedy tylko kompilator zacznie dzia\u0142a\u0107 wystarczaj\u0105co dobrze, to zostanie on upubliczniony. Je\u015bli omin\u0105\u0142 Was temat React Forget, to nadal najlepszym \u017ar\u00f3d\u0142em na jego temat jest oryginalna prezentacja <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\" target=\"_blank\" rel=\"noreferrer noopener\">React without memo<\/a>.<\/li>\n\n\n\n<li>Ostatni\u0105 funkcjonalno\u015bci\u0105 wspomnian\u0105 w notatce jest Offscreen Rendering, czyli jak opisuj\u0105 tw\u00f3rcy, odpowiednik <code>content-visiblity: hidden<\/code> dla Reactowych komponent\u00f3w. Jak donosz\u0105 tw\u00f3rcy, pierwsza implementacja jest ju\u017c wykorzystywana przez Met\u0119 w React Native, ale na pe\u0142noprawne RFC przyjdzie nam jeszcze troch\u0119 poczeka\u0107.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"2-starszyzna-znow-obraduje-co-ciekawgo-przynioslo-kolejne-spotkanie-tc39-meeting\" data-num=2>2. Starszyzna zn\u00f3w obraduje &#8211; co ciekawgo przynios\u0142o kolejne spotkanie TC39 Meeting<\/h2>\n\n\n\n<p>W minionym tygodniu po raz kolejny miejsce mia\u0142o TC39 Meeting, czyli zebranie JavaScriptowej starszyzny na kt\u00f3rym omawiane s\u0105 nowe funkcjonalno\u015bci j\u0119zyka. Jak zwykle omawiane by\u0142o kilka ciekawych nowo\u015bci, ale zanim przejdziemy do konkret\u00f3w, pokr\u00f3tce przypomnijmy czym jest TC39 i jak w szczeg\u00f3\u0142ach wygl\u0105da proces standaryzacyjny.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/grid_0-1-1024x683.png\" alt=\"\" class=\"wp-image-15454\" width=\"606\" height=\"403\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/grid_0-1-1024x683.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/grid_0-1-300x200.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/grid_0-1-768x512.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/grid_0-1.png 1536w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><figcaption class=\"wp-element-caption\">Obrady TC39 &#8211; koloryzowane<\/figcaption><\/figure><\/div>\n\n\n<p>TC39 to grupa zajmuj\u0105ca si\u0119 standaryzacj\u0105 j\u0119zyka JavaScript na kt\u00f3r\u0105 sk\u0142adaj\u0105 si\u0119 przedstawiciele najwa\u017cniejszych udzia\u0142owc\u00f3w &#8211; np. deweloperzy Chrome, Safari, Firefox, Node czy Babel. Sam proces sk\u0142ada si\u0119 z 4 etap\u00f3w. Zanim nowa funkcjonalno\u015b\u0107 zostanie przedstawiona na spotkaniu TC39, stworzony zostaje dobrze opisany Proposal oraz wybierany jest tak zwany Champion, czyli osoba odpowiedzialna za Proposal na kolejnych etapach standaryzacji. Je\u015bli dana funkcjonalno\u015b\u0107 trafi do pierwszego etapu standaryzacji, to znaczy, \u017ce komisja uzna\u0142a funkcjonalno\u015b\u0107 za interesuj\u0105c\u0105 i pragnie dalej zg\u0142\u0119bi\u0107 temat.  Kiedy funkcjonalno\u015b\u0107 przebija si\u0119 do drugiego etapu, oznacza to, \u017ce jest ona ju\u017c dobrze przemy\u015blana, a samo API bliskie jest finalizacji. Po przebiciu si\u0119 do trzeciego etapu, API bardzo rzadko si\u0119 zmienia. Na tym etapie przygotowywane jest r\u00f3wnie\u017c pierwsza implementacja oraz niezb\u0119dne pollyfille. Je\u015blu funkcjonalno\u015b\u0107 trafia do etapu czwartego, to oznacza to, \u017ce trafi ona do najbli\u017cszej specyfikacji j\u0119zyka, kt\u00f3ra publikowana jest zazwyczaj w pierwszym kwartale ka\u017cdego roku.<\/p>\n\n\n\n<p>Poni\u017cej znajdziecie kilka wybranych przez nas funkcjonalno\u015bci omawianych na ostatnim spotkaniu TC39 meeting. Je\u015bli jeste\u015bcie zainteresowani pe\u0142n\u0105 list\u0105, to mo\u017cecie j\u0105 znale\u017a\u0107 <a href=\"https:\/\/dev.to\/hemanth\/updates-from-the-95th-tc39-meeting-ne5\" target=\"_blank\" rel=\"noreferrer noopener\">tutaj<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 3 &#8211; import assertions<\/h3>\n\n\n\n<p>Powszechnie uznaje si\u0119, \u017ce je\u015bli dana funkcjonalno\u015b\u0107 trafi do trzeciego etapu standaryzacji, to na 90% trafi wkr\u00f3tce do standardu j\u0119zyka. Funkcjonalno\u015b\u0107 import assertions znalaz\u0142a si\u0119 w nieszcz\u0119\u015bliwych 10% i na poprzednim spotkaniu TC39, ze wzgl\u0119du na kilka istotnych w\u0105tpliwo\u015bci, zosta\u0142a cofni\u0119ta do etapu drugiego. Teraz wraca ona z powrotem do etapu trzeciego. <\/p>\n\n\n\n<p>O co chodzi z import assertions? Je\u015bli funkcjonalno\u015b\u0107 ta trafi do j\u0119zyka, b\u0119dziemy mogli bez problemu importowa\u0107 pliki JSON czy WebAssembly bezpo\u015brednio z poziomu JavaScriptu. Je\u015bli co\u015b Wam to przypomina, to podobne zachowanie mo\u017cna osi\u0105gn\u0105\u0107 przez odpowiedni\u0105 konfiguracj\u0119 webpacka.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import json from &quot;.\/foo.json&quot; with { type: &quot;json&quot; };\nexport val from &#039;.\/foo.js&#039; with { type: &quot;javascript&quot; };\nnew Worker(&quot;foo.wasm&quot;, { type: &quot;module&quot;, with: { type: &quot;webassembly&quot; } });<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-import-attributes\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal &#8211; Import Attributes<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 2 &#8211; <code>Iterator.range()<\/code><\/h3>\n\n\n\n<p>Na pewno staneli\u015bcie kiedy\u015b przed potrzeb\u0105 wygenerowania listy liczb z odpowiedniego zakresu. J\u0119zyki takie jak Python czy Scala oferuj\u0105 tak\u0105 funkcjonalno\u015b\u0107 w bibliotece standardowej. Niestety do tej pory JavaScrtipt nie by\u0142 wyposa\u017cony w takie luksusy i skazani byli\u015bmy albo na korzystanie z zewn\u0119trznych bibliotek (np. <a href=\"https:\/\/lodash.com\/docs\/4.17.15#range\" target=\"_blank\" rel=\"noreferrer noopener\">lodash<\/a> lub <a href=\"https:\/\/underscorejs.org\/#range\" target=\"_blank\" rel=\"noreferrer noopener\">underscore<\/a>) albo na kilka pokr\u0119tnych hack\u00f3w (<a href=\"https:\/\/stackoverflow.com\/questions\/3895478\/does-javascript-have-a-method-like-range-to-generate-a-range-within-the-supp\" target=\"_blank\" rel=\"noreferrer noopener\">w\u0105tek na Stackoverflow<\/a> sugeruje ponad 20 mo\u017cliwych rozwi\u0105za\u0144!). Na szcz\u0119\u015bcie TC39 ju\u017c pracuje nad rozwi\u0105zaniem tego problemu. Co ciekawe nowa funkcja zwraca\u0107 b\u0119dzie iterator, co pozwoli nam w \u0142atwy spos\u00f3b operowa\u0107 na niesko\u0144czonych zbiorach.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ odd number from 1 to 99\n[...Iterator.range(1, 100, 2)] \n\n\/\/ numbers from 1 to 1000 that are divisible by 3\nIterator.range(0, Infinity)\n    .take(1000)\n    .filter((x) =&gt; !(x % 3))\n    .toArray();\n\n\/\/ generator function yielding even numbers infinitely\nfunction* even() {\n    for (const i of Iterator.range(0, Infinity)) if (i % 2 === 0) yield i\n};<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-iterator.range\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal &#8211; Range<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 1 &#8211; Class method and consturcor decorators<\/h3>\n\n\n\n<p><a href=\"https:\/\/vived.io\/typescript-5-0-is-here-frontend-weekly-vol-129\/\" target=\"_blank\" rel=\"noreferrer noopener\">Niespe\u0142na kilka tygodni temu w naszym przegl\u0105dzie opisywali\u015bmy histori\u0119 dekorator\u00f3w w TypeScript i JavaScript<\/a>, a w tym tygodniu pojawi\u0142y si\u0119 nowy Proposal w tym temacie. Zgodnie z aktualnym <a href=\"https:\/\/github.com\/tc39\/proposal-decorators\" target=\"_blank\" rel=\"noreferrer noopener\">Proposalem znajduj\u0105cym si\u0119 w trzecim etapie standaryzacji<\/a>, dekorowane mog\u0105 by\u0107 tylko klasy i metody. Mocno ogranicza to tw\u00f3rc\u00f3w framework\u00f3w, bo dekorowanie parametr\u00f3w cz\u0119sto wykorzystywane jest w celu dostarczenia dodatkowego kontekstu dla Dependency Injection (np. <code>@Optional()<\/code> lub <code>@Inject(TOKEN)<\/code>) lub do automatycznej walidacji danych wej\u015bciowych (np. <code>@ValidateEmail()<\/code> lub <code>@NotEmpty()<\/code>). Omawiany na tym spotkaniu Proposal dodaje tak\u0105 w\u0142a\u015bnie mo\u017cliwo\u015b\u0107.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">class UserManager {\n  createUser(@NotEmpty username, @NotEmpty password, @ValidateEmail emailAddress) { }\n}<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-class-method-parameter-decorators\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal &#8211; Class method and consturcor decorators<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 1 &#8211; <code>Promise.withResolvers<\/code><\/h3>\n\n\n\n<p>Standardowym sposobem na stworzenie obiektu Promise jest przekazanie do konstruktora odpowiedniego callbacka.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const myPromise = new Promise((resolve, reject) =&gt; {\n  \/* Some code *\/\n  if(result) {\n    resolve(&quot;Ok&quot;)\n  } else {\n    reject(new Error(&quot;Rejected&quot;))\n  }\n})<\/code><\/pre>\n\n\n\n<p>Na problem napotykamy w momencie, kiedy Promise chcemy obs\u0142u\u017cy\u0107 spoza poziomy callbacka. Jest to oczywi\u015bcie mo\u017cliwe, ale wymaga napisania kawa\u0142ka niezbyt \u0142adnego kodu.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">let resolve;\nlet reject;\nconst myPromise = new Promise((resolve_, reject_) =&gt; {\n  resolve = resolve_;\n  reject = reject_;\n})\n\/* Some code *\/\nif(result) {\n  resolve(&quot;Ok&quot;)\n} else {\n  reject(new Error(&quot;Rejected&quot;))\n}<\/code><\/pre>\n\n\n\n<p>Nowo zaproponowane API oferowa\u0107 ma czytelniejsze rozwi\u0105zanie tego problemu.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const { promise, resolve, reject } = Promise.withResolvers();\n\/* Some code *\/\nif(result) {\n  resolve(&quot;Ok&quot;)\n} else {\n  reject(new Error(&quot;Rejected&quot;))\n}<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-promise-with-resolvers\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal &#8211; <code>Promise.withResolvers<\/code><\/a><\/p>\n\n\n\n<h2 id=\"3-generyki-zmierzaja-do-vue-single-file-components\" data-num=3>3. Generyki zmierzaj\u0105 do Vue Single File Components<\/h2>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">When someone asks me about my favorite framework \ud83d\udc9a<a href=\"https:\/\/twitter.com\/vuejs?ref_src=twsrc%5Etfw\">@vuejs<\/a> <a href=\"https:\/\/twitter.com\/youyuxi?ref_src=twsrc%5Etfw\">@youyuxi<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/VueJS?src=hash&amp;ref_src=twsrc%5Etfw\">#VueJS<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/reactjs?src=hash&amp;ref_src=twsrc%5Etfw\">#reactjs<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/angularjs?src=hash&amp;ref_src=twsrc%5Etfw\">#angularjs<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/javascript?src=hash&amp;ref_src=twsrc%5Etfw\">#javascript<\/a> <a href=\"https:\/\/t.co\/xypmoCded6\">pic.twitter.com\/xypmoCded6<\/a><\/p>&mdash; Michel Carlos (@micheldpcarlos) <a href=\"https:\/\/twitter.com\/micheldpcarlos\/status\/1629482943700672525?ref_src=twsrc%5Etfw\">February 25, 2023<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<p>Vue 3.3 zbli\u017ca si\u0119 wielkimi krokami i powoli zaczynaj\u0105 do nas sp\u0142ywa\u0107 informacje o zmierzaj\u0105cych do niego funkcjonalno\u015bciach. <a href=\"https:\/\/github.com\/vuejs\/rfcs\/discussions\/436#discussioncomment-4907987\" target=\"_blank\" rel=\"noreferrer noopener\">W tym tygodniu Evan You zdradzi\u0142, \u017ce do najnowszej wersji frameworka trafi\u0105 generyczne komponenty.<\/a> Jest to jedna z d\u0142u\u017cej wyczekiwanych funkcjonalno\u015bci Vue, bo <a href=\"https:\/\/github.com\/vuejs\/core\/issues\/3102\" target=\"_blank\" rel=\"noreferrer noopener\">pierwsze dyskusje na jej temat mia\u0142y miejsce ju\u017c w 2021 roku<\/a>!<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\">&lt;script\n  setup\n  lang=&quot;ts&quot;\n  generic=&quot;Clearable extends boolean, ValueType extends string | number | null | undefined&quot;\n&gt;\n  defineProps&lt;{\n    clearable?: Clearable;\n    value?: ValueType;;\n  }&gt;\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<h2 id=\"4-microsoft-zmigrowal-teamsy-do-webview2\" data-num=4>4. Microsoft zmigrowa\u0142 Teamsy do WebView2<\/h2>\n\n\n\n<p>Na zako\u0144czenie dzisiejszego przegl\u0105du mamy dla Was Case Study od Microsoftu, kt\u00f3ry w\u0142a\u015bnie zako\u0144czy\u0142 migracj\u0119 Microsoft Teams z AngularJS do Reacta oraz z Electrona do WebView2. Dla przypomnienia WebView2, to w uproszczeniu technologia umo\u017cliwaj\u0105ca embedowanie w natywnych aplikacjach Microsoft Edge. Czym jest React i AngularJS chyba nikomu nie musimy przypomina\u0107.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"666\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/yg3g96eymct41.jpeg\" alt=\"\" class=\"wp-image-15450\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/yg3g96eymct41.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/yg3g96eymct41-225x300.jpeg 225w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption class=\"wp-element-caption\">\u0179r\u00f3d\u0142o: <a href=\"https:\/\/www.reddit.com\/r\/memes\/comments\/g2yvrf\/anyone_else_using_microsoft_teams_for_school\/\" target=\"_blank\" rel=\"noreferrer noopener\">Reddit<\/a><\/figcaption><\/figure><\/div>\n\n\n<p>Migracja przynios\u0142a znacz\u0105c\u0105 popraw\u0119 zar\u00f3wno je\u015bli chodzi o zu\u017cycie pami\u0119ci jak i procesora. Uaktualniona wersja zacz\u0119\u0142a ju\u017c trafia\u0107 do &#8222;regularnych klient\u00f3w&#8221;, a wkr\u00f3tce zacznie r\u00f3wnie\u017c trafia\u0107 do tych komercyjnych. Je\u015bli jeste\u015bcie ciekawi jak wygl\u0105da teraz architektura Microsoft Teams i gdzie uda\u0142o si\u0119 ugra\u0107 najwi\u0119cej, to wszystkiego dowiecie si\u0119 z notatki podlinkowanej poni\u017cej.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/techcommunity.microsoft.com\/t5\/microsoft-teams-blog\/microsoft-teams-advantages-of-the-new-architecture\/ba-p\/3775704\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Teams: Advantages of the new architecture<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zastanawiacie si\u0119 co dzieje si\u0119 z React Server Components i co sta\u0142o si\u0119 z obiecywanym od dawna kompilatorem React Forget? Je\u015bli tak, to w dzisiejszym raporcie znajdziecie odpowiedzi na te pytana. Poza tym dowiecie si\u0119 jakie nowe funkcjonalno\u015bci zmierzaj\u0105 do JavaScriptu i jak Microsoft przy\u015bpieszy\u0142 Teams prawie dwukrotnie.<\/p>\n","protected":false},"author":12,"featured_media":15445,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273,1],"tags":[],"class_list":["post-15435","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl","category-no-category"],"acf":{"feature_image_visible":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png","feature_image_blog":{"ID":15443,"id":15443,"title":"Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724","filename":"Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724.png","filesize":2090720,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724.png","link":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/vived_a_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724\/","alt":"","author":"12","description":"","caption":"","name":"vived_a_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724","status":"inherit","uploaded_to":15435,"date":"2023-03-31 14:24:32","modified":"2023-03-31 14:24:32","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1536,"height":1024,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724-300x200.png","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724-768x512.png","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724-1024x683.png","large-width":1024,"large-height":683,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724.png","1536x1536-width":1536,"1536x1536-height":1024,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724.png","2048x2048-width":1536,"2048x2048-height":1024,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Vived_A_team_of_programmers_can_be_seen_working_diligently_in_a_28a9bf1b-e4af-4e15-bafb-8e42f03e1724.png","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"estimated_reading_time":"7"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131 - 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\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131 - Vived\" \/>\n<meta property=\"og:description\" content=\"Zastanawiacie si\u0119 co dzieje si\u0119 z React Server Components i co sta\u0142o si\u0119 z obiecywanym od dawna kompilatorem React Forget? Je\u015bli tak, to w dzisiejszym raporcie znajdziecie odpowiedzi na te pytana. Poza tym dowiecie si\u0119 jakie nowe funkcjonalno\u015bci zmierzaj\u0105 do JavaScriptu i jak Microsoft przy\u015bpieszy\u0142 Teams prawie dwukrotnie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-31T14:55:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-31T14:55:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\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<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131\",\"datePublished\":\"2023-03-31T14:55:03+00:00\",\"dateModified\":\"2023-03-31T14:55:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/\"},\"wordCount\":1347,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png\",\"articleSection\":[\"Frontend\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/\",\"url\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/\",\"name\":\"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png\",\"datePublished\":\"2023-03-31T14:55:03+00:00\",\"dateModified\":\"2023-03-31T14:55:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131\"}]},{\"@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":"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131 - 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\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/","og_locale":"pl_PL","og_type":"article","og_title":"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131 - Vived","og_description":"Zastanawiacie si\u0119 co dzieje si\u0119 z React Server Components i co sta\u0142o si\u0119 z obiecywanym od dawna kompilatorem React Forget? Je\u015bli tak, to w dzisiejszym raporcie znajdziecie odpowiedzi na te pytana. Poza tym dowiecie si\u0119 jakie nowe funkcjonalno\u015bci zmierzaj\u0105 do JavaScriptu i jak Microsoft przy\u015bpieszy\u0142 Teams prawie dwukrotnie.","og_url":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/","og_site_name":"Vived","article_published_time":"2023-03-31T14:55:03+00:00","article_modified_time":"2023-03-31T14:55:06+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131","datePublished":"2023-03-31T14:55:03+00:00","dateModified":"2023-03-31T14:55:06+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/"},"wordCount":1347,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png","articleSection":["Frontend","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/","url":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/","name":"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png","datePublished":"2023-03-31T14:55:03+00:00","dateModified":"2023-03-31T14:55:06+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Frontend-Weekly-1200x628_V2-4.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/nad-czym-pracuje-zespol-reacta-i-tc39-frontend-weekly-vol-131\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Nad czym pracuje zesp\u00f3\u0142 Reacta i TC39? | Frontend Weekly vol. 131"}]},{"@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. Nad czym pracuje zesp\u00f3\u0142 Reacta?<\/h2>\n","innerContent":["\n<h2>1. Nad czym pracuje zesp\u00f3\u0142 Reacta?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W minionym tygodniu zesp\u00f3\u0142 Reacta podzieli\u0142 si\u0119 z nami <a href=\"https:\/\/react.dev\/blog\/2023\/03\/22\/react-labs-what-we-have-been-working-on-march-2023\" target=\"_blank\" rel=\"noreferrer noopener\">zbiorczym podsumowaniem wszystkich inicjatyw maj\u0105cych miejsce w projekcie<\/a>. Notatka naprawd\u0119 nie jest d\u0142uga, dlatego ka\u017cdemu polcam przeczyta\u0107 j\u0105 osobi\u015bcie. Natomiast dla wszystkich zbyt zaj\u0119tych przed\u015bwi\u0105tecznymi przygotowaniami mamy kr\u00f3tkie podsumowanie najwa\u017cniejszych podpunkt\u00f3w.<\/p>\n","innerContent":["\n<p>W minionym tygodniu zesp\u00f3\u0142 Reacta podzieli\u0142 si\u0119 z nami <a href=\"https:\/\/react.dev\/blog\/2023\/03\/22\/react-labs-what-we-have-been-working-on-march-2023\" target=\"_blank\" rel=\"noreferrer noopener\">zbiorczym podsumowaniem wszystkich inicjatyw maj\u0105cych miejsce w projekcie<\/a>. Notatka naprawd\u0119 nie jest d\u0142uga, dlatego ka\u017cdemu polcam przeczyta\u0107 j\u0105 osobi\u015bcie. Natomiast dla wszystkich zbyt zaj\u0119tych przed\u015bwi\u0105tecznymi przygotowaniami mamy kr\u00f3tkie podsumowanie najwa\u017cniejszych podpunkt\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>React Server Components to nowa architekura nad kt\u00f3r\u0105 zesp\u00f3\u0142 pracuje ju\u017c od 2020 roku. Nadal s\u0105 one w fazie bety, ale obecnie s\u0105 g\u0142\u00f3wnym priorytetem zespo\u0142u. Z React Server Components mo\u017cemy korzysta\u0107 ju\u017c na przyk\u0142ad w Next.js czy Gatsby. Je\u015bli chcecie nadrobi\u0107 temat React Server Components, to najlepszym \u017ar\u00f3d\u0142em b\u0119dzie artyku\u0142 opublikowany na blogu Plasmic <a href=\"https:\/\/www.plasmic.app\/blog\/how-react-server-components-work\" target=\"_blank\" rel=\"noreferrer noopener\">\"How React server components work: an in-depth guide\"<\/a>.<\/li>\n","innerContent":["\n<li>React Server Components to nowa architekura nad kt\u00f3r\u0105 zesp\u00f3\u0142 pracuje ju\u017c od 2020 roku. Nadal s\u0105 one w fazie bety, ale obecnie s\u0105 g\u0142\u00f3wnym priorytetem zespo\u0142u. Z React Server Components mo\u017cemy korzysta\u0107 ju\u017c na przyk\u0142ad w Next.js czy Gatsby. Je\u015bli chcecie nadrobi\u0107 temat React Server Components, to najlepszym \u017ar\u00f3d\u0142em b\u0119dzie artyku\u0142 opublikowany na blogu Plasmic <a href=\"https:\/\/www.plasmic.app\/blog\/how-react-server-components-work\" target=\"_blank\" rel=\"noreferrer noopener\">\"How React server components work: an in-depth guide\"<\/a>.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Od czasu publikacji ostatniej aktualizacji, ustabilizowana zosta\u0142a konwencja oznaczania serwerowych oraz klienckich komponent\u00f3w. Zamiast rozszerze\u0144 <code>.server.tsx<\/code> i <code>.client.tsx<\/code> u\u017cywa\u0107 b\u0119dziemy shebang <code>use client<\/code> i <code>use server<\/code>. <\/li>\n","innerContent":["\n<li>Od czasu publikacji ostatniej aktualizacji, ustabilizowana zosta\u0142a konwencja oznaczania serwerowych oraz klienckich komponent\u00f3w. Zamiast rozszerze\u0144 <code>.server.tsx<\/code> i <code>.client.tsx<\/code> u\u017cywa\u0107 b\u0119dziemy shebang <code>use client<\/code> i <code>use server<\/code>. <\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Do przodu posun\u0119\u0142y si\u0119 r\u00f3wnie\u017c prace nad RFC dotycz\u0105cym obs\u0142ugi async\/await. Serwerowe komponenty b\u0119d\u0105 mog\u0142y bezpo\u015brednio korzysta\u0107 z sk\u0142adni JavaScript, natomiast komponenty klienckie b\u0119da mog\u0142y odpakowa\u0107 Promisy przy pomocy nowego hooka <code>use(Promise)<\/code>. Wi\u0119cej o tym jak b\u0119dzie dzia\u0142a\u0142 nowy hook mo\u017cecie przeczyta\u0107 w <a href=\"https:\/\/vived.io\/new-hook-is-coming-to-react-frontend-weekly-vol-109\/\" target=\"_blank\" rel=\"noreferrer noopener\">109 edycji naszego przegl\u0105du<\/a>.<\/li>\n","innerContent":["\n<li>Do przodu posun\u0119\u0142y si\u0119 r\u00f3wnie\u017c prace nad RFC dotycz\u0105cym obs\u0142ugi async\/await. Serwerowe komponenty b\u0119d\u0105 mog\u0142y bezpo\u015brednio korzysta\u0107 z sk\u0142adni JavaScript, natomiast komponenty klienckie b\u0119da mog\u0142y odpakowa\u0107 Promisy przy pomocy nowego hooka <code>use(Promise)<\/code>. Wi\u0119cej o tym jak b\u0119dzie dzia\u0142a\u0142 nowy hook mo\u017cecie przeczyta\u0107 w <a href=\"https:\/\/vived.io\/new-hook-is-coming-to-react-frontend-weekly-vol-109\/\" target=\"_blank\" rel=\"noreferrer noopener\">109 edycji naszego przegl\u0105du<\/a>.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Najwi\u0119ksz\u0105 nowo\u015bci\u0105 dotycz\u0105c\u0105 React Server Components s\u0105 prace nad Server Actions. Umo\u017cliwi\u0105 one klienckim komponentom wykonywanie operacji bezpo\u015brednio na serwerze. Szczeg\u00f3\u0142owego RFC mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n","innerContent":["\n<li>Najwi\u0119ksz\u0105 nowo\u015bci\u0105 dotycz\u0105c\u0105 React Server Components s\u0105 prace nad Server Actions. Umo\u017cliwi\u0105 one klienckim komponentom wykonywanie operacji bezpo\u015brednio na serwerze. Szczeg\u00f3\u0142owego RFC mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Zesp\u00f3\u0142 aktualnie pracuje nad integracj\u0105 komponentu <code>&lt;Suspense \/><\/code> z \u0142adowaniem zasob\u00f3w - np. plik\u00f3w CSS i zewn\u0119trznych skrypt\u00f3w. Szczeg\u00f3\u0142owego RFC mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n","innerContent":["\n<li>Zesp\u00f3\u0142 aktualnie pracuje nad integracj\u0105 komponentu <code>&lt;Suspense \/><\/code> z \u0142adowaniem zasob\u00f3w - np. plik\u00f3w CSS i zewn\u0119trznych skrypt\u00f3w. Szczeg\u00f3\u0142owego RFC mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Kolejn\u0105 funkcjonalno\u015bci\u0105 nad kt\u00f3r\u0105 aktualnie pracuje zesp\u00f3\u0142 jest obs\u0142uga <code>&lt;title><\/code> i <code>&lt;meta><\/code>. Co prawda obecnie istniej\u0105 rozwi\u0105zania umo\u017cliwiaj\u0105ce manipulacj\u0119 tymi parametrami (np. <a href=\"https:\/\/www.npmjs.com\/package\/helmet\" target=\"_blank\" rel=\"noreferrer noopener\">Helmet<\/a>), ale wymagaj\u0105 one wyrenderowania ca\u0142ej aplikacji po stronie serwera. Takie zachowanie k\u0142\u00f3ci si\u0119 z ide\u0105 React Server Components i z tego powodu zesp\u00f3\u0142 zdecydowa\u0142 si\u0119 przygotowa\u0107 specjalne API wbudowane w bibliotek\u0119. Szczeg\u00f3\u0142owego RFC r\u00f3wnie\u017c mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n","innerContent":["\n<li>Kolejn\u0105 funkcjonalno\u015bci\u0105 nad kt\u00f3r\u0105 aktualnie pracuje zesp\u00f3\u0142 jest obs\u0142uga <code>&lt;title><\/code> i <code>&lt;meta><\/code>. Co prawda obecnie istniej\u0105 rozwi\u0105zania umo\u017cliwiaj\u0105ce manipulacj\u0119 tymi parametrami (np. <a href=\"https:\/\/www.npmjs.com\/package\/helmet\" target=\"_blank\" rel=\"noreferrer noopener\">Helmet<\/a>), ale wymagaj\u0105 one wyrenderowania ca\u0142ej aplikacji po stronie serwera. Takie zachowanie k\u0142\u00f3ci si\u0119 z ide\u0105 React Server Components i z tego powodu zesp\u00f3\u0142 zdecydowa\u0142 si\u0119 przygotowa\u0107 specjalne API wbudowane w bibliotek\u0119. Szczeg\u00f3\u0142owego RFC r\u00f3wnie\u017c mo\u017cemy spodziewa\u0107 si\u0119 ju\u017c wkr\u00f3tce.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>React Forget to zapowiedziany w 2021 kompilator, kt\u00f3ry ma automatycznie zajmowa\u0107 si\u0119 memonizacj\u0105 (<code>useCallback<\/code> i <code>useMemo<\/code>). Prace nad kompilatorem znacz\u0105co si\u0119 przed\u0142u\u017cy\u0142y, ale jest on ju\u017c u\u017cywany w pierwszych projektach wewn\u0105trz Mety. Kiedy tylko kompilator zacznie dzia\u0142a\u0107 wystarczaj\u0105co dobrze, to zostanie on upubliczniony. Je\u015bli omin\u0105\u0142 Was temat React Forget, to nadal najlepszym \u017ar\u00f3d\u0142em na jego temat jest oryginalna prezentacja <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\" target=\"_blank\" rel=\"noreferrer noopener\">React without memo<\/a>.<\/li>\n","innerContent":["\n<li>React Forget to zapowiedziany w 2021 kompilator, kt\u00f3ry ma automatycznie zajmowa\u0107 si\u0119 memonizacj\u0105 (<code>useCallback<\/code> i <code>useMemo<\/code>). Prace nad kompilatorem znacz\u0105co si\u0119 przed\u0142u\u017cy\u0142y, ale jest on ju\u017c u\u017cywany w pierwszych projektach wewn\u0105trz Mety. Kiedy tylko kompilator zacznie dzia\u0142a\u0107 wystarczaj\u0105co dobrze, to zostanie on upubliczniony. Je\u015bli omin\u0105\u0142 Was temat React Forget, to nadal najlepszym \u017ar\u00f3d\u0142em na jego temat jest oryginalna prezentacja <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\" target=\"_blank\" rel=\"noreferrer noopener\">React without memo<\/a>.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Ostatni\u0105 funkcjonalno\u015bci\u0105 wspomnian\u0105 w notatce jest Offscreen Rendering, czyli jak opisuj\u0105 tw\u00f3rcy, odpowiednik <code>content-visiblity: hidden<\/code> dla Reactowych komponent\u00f3w. Jak donosz\u0105 tw\u00f3rcy, pierwsza implementacja jest ju\u017c wykorzystywana przez Met\u0119 w React Native, ale na pe\u0142noprawne RFC przyjdzie nam jeszcze troch\u0119 poczeka\u0107.<\/li>\n","innerContent":["\n<li>Ostatni\u0105 funkcjonalno\u015bci\u0105 wspomnian\u0105 w notatce jest Offscreen Rendering, czyli jak opisuj\u0105 tw\u00f3rcy, odpowiednik <code>content-visiblity: hidden<\/code> dla Reactowych komponent\u00f3w. Jak donosz\u0105 tw\u00f3rcy, pierwsza implementacja jest ju\u017c wykorzystywana przez Met\u0119 w React Native, ale na pe\u0142noprawne RFC przyjdzie nam jeszcze troch\u0119 poczeka\u0107.<\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Starszyzna zn\u00f3w obraduje - co ciekawgo przynios\u0142o kolejne spotkanie TC39 Meeting<\/h2>\n","innerContent":["\n<h2>2. Starszyzna zn\u00f3w obraduje - co ciekawgo przynios\u0142o kolejne spotkanie TC39 Meeting<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W minionym tygodniu po raz kolejny miejsce mia\u0142o TC39 Meeting, czyli zebranie JavaScriptowej starszyzny na kt\u00f3rym omawiane s\u0105 nowe funkcjonalno\u015bci j\u0119zyka. Jak zwykle omawiane by\u0142o kilka ciekawych nowo\u015bci, ale zanim przejdziemy do konkret\u00f3w, pokr\u00f3tce przypomnijmy czym jest TC39 i jak w szczeg\u00f3\u0142ach wygl\u0105da proces standaryzacyjny.<\/p>\n","innerContent":["\n<p>W minionym tygodniu po raz kolejny miejsce mia\u0142o TC39 Meeting, czyli zebranie JavaScriptowej starszyzny na kt\u00f3rym omawiane s\u0105 nowe funkcjonalno\u015bci j\u0119zyka. Jak zwykle omawiane by\u0142o kilka ciekawych nowo\u015bci, ale zanim przejdziemy do konkret\u00f3w, pokr\u00f3tce przypomnijmy czym jest TC39 i jak w szczeg\u00f3\u0142ach wygl\u0105da proces standaryzacyjny.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15454,"width":606,"height":403,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/grid_0-1-1024x683.png\" alt=\"\" class=\"wp-image-15454\" width=\"606\" height=\"403\"\/><figcaption class=\"wp-element-caption\">Obrady TC39 - koloryzowane<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/grid_0-1-1024x683.png\" alt=\"\" class=\"wp-image-15454\" width=\"606\" height=\"403\"\/><figcaption class=\"wp-element-caption\">Obrady TC39 - koloryzowane<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>TC39 to grupa zajmuj\u0105ca si\u0119 standaryzacj\u0105 j\u0119zyka JavaScript na kt\u00f3r\u0105 sk\u0142adaj\u0105 si\u0119 przedstawiciele najwa\u017cniejszych udzia\u0142owc\u00f3w - np. deweloperzy Chrome, Safari, Firefox, Node czy Babel. Sam proces sk\u0142ada si\u0119 z 4 etap\u00f3w. Zanim nowa funkcjonalno\u015b\u0107 zostanie przedstawiona na spotkaniu TC39, stworzony zostaje dobrze opisany Proposal oraz wybierany jest tak zwany Champion, czyli osoba odpowiedzialna za Proposal na kolejnych etapach standaryzacji. Je\u015bli dana funkcjonalno\u015b\u0107 trafi do pierwszego etapu standaryzacji, to znaczy, \u017ce komisja uzna\u0142a funkcjonalno\u015b\u0107 za interesuj\u0105c\u0105 i pragnie dalej zg\u0142\u0119bi\u0107 temat.  Kiedy funkcjonalno\u015b\u0107 przebija si\u0119 do drugiego etapu, oznacza to, \u017ce jest ona ju\u017c dobrze przemy\u015blana, a samo API bliskie jest finalizacji. Po przebiciu si\u0119 do trzeciego etapu, API bardzo rzadko si\u0119 zmienia. Na tym etapie przygotowywane jest r\u00f3wnie\u017c pierwsza implementacja oraz niezb\u0119dne pollyfille. Je\u015blu funkcjonalno\u015b\u0107 trafia do etapu czwartego, to oznacza to, \u017ce trafi ona do najbli\u017cszej specyfikacji j\u0119zyka, kt\u00f3ra publikowana jest zazwyczaj w pierwszym kwartale ka\u017cdego roku.<\/p>\n","innerContent":["\n<p>TC39 to grupa zajmuj\u0105ca si\u0119 standaryzacj\u0105 j\u0119zyka JavaScript na kt\u00f3r\u0105 sk\u0142adaj\u0105 si\u0119 przedstawiciele najwa\u017cniejszych udzia\u0142owc\u00f3w - np. deweloperzy Chrome, Safari, Firefox, Node czy Babel. Sam proces sk\u0142ada si\u0119 z 4 etap\u00f3w. Zanim nowa funkcjonalno\u015b\u0107 zostanie przedstawiona na spotkaniu TC39, stworzony zostaje dobrze opisany Proposal oraz wybierany jest tak zwany Champion, czyli osoba odpowiedzialna za Proposal na kolejnych etapach standaryzacji. Je\u015bli dana funkcjonalno\u015b\u0107 trafi do pierwszego etapu standaryzacji, to znaczy, \u017ce komisja uzna\u0142a funkcjonalno\u015b\u0107 za interesuj\u0105c\u0105 i pragnie dalej zg\u0142\u0119bi\u0107 temat.  Kiedy funkcjonalno\u015b\u0107 przebija si\u0119 do drugiego etapu, oznacza to, \u017ce jest ona ju\u017c dobrze przemy\u015blana, a samo API bliskie jest finalizacji. Po przebiciu si\u0119 do trzeciego etapu, API bardzo rzadko si\u0119 zmienia. Na tym etapie przygotowywane jest r\u00f3wnie\u017c pierwsza implementacja oraz niezb\u0119dne pollyfille. Je\u015blu funkcjonalno\u015b\u0107 trafia do etapu czwartego, to oznacza to, \u017ce trafi ona do najbli\u017cszej specyfikacji j\u0119zyka, kt\u00f3ra publikowana jest zazwyczaj w pierwszym kwartale ka\u017cdego roku.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poni\u017cej znajdziecie kilka wybranych przez nas funkcjonalno\u015bci omawianych na ostatnim spotkaniu TC39 meeting. Je\u015bli jeste\u015bcie zainteresowani pe\u0142n\u0105 list\u0105, to mo\u017cecie j\u0105 znale\u017a\u0107 <a href=\"https:\/\/dev.to\/hemanth\/updates-from-the-95th-tc39-meeting-ne5\" target=\"_blank\" rel=\"noreferrer noopener\">tutaj<\/a>.<\/p>\n","innerContent":["\n<p>Poni\u017cej znajdziecie kilka wybranych przez nas funkcjonalno\u015bci omawianych na ostatnim spotkaniu TC39 meeting. Je\u015bli jeste\u015bcie zainteresowani pe\u0142n\u0105 list\u0105, to mo\u017cecie j\u0105 znale\u017a\u0107 <a href=\"https:\/\/dev.to\/hemanth\/updates-from-the-95th-tc39-meeting-ne5\" target=\"_blank\" rel=\"noreferrer noopener\">tutaj<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Stage 3 - import assertions<\/h3>\n","innerContent":["\n<h3>Stage 3 - import assertions<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Powszechnie uznaje si\u0119, \u017ce je\u015bli dana funkcjonalno\u015b\u0107 trafi do trzeciego etapu standaryzacji, to na 90% trafi wkr\u00f3tce do standardu j\u0119zyka. Funkcjonalno\u015b\u0107 import assertions znalaz\u0142a si\u0119 w nieszcz\u0119\u015bliwych 10% i na poprzednim spotkaniu TC39, ze wzgl\u0119du na kilka istotnych w\u0105tpliwo\u015bci, zosta\u0142a cofni\u0119ta do etapu drugiego. Teraz wraca ona z powrotem do etapu trzeciego. <\/p>\n","innerContent":["\n<p>Powszechnie uznaje si\u0119, \u017ce je\u015bli dana funkcjonalno\u015b\u0107 trafi do trzeciego etapu standaryzacji, to na 90% trafi wkr\u00f3tce do standardu j\u0119zyka. Funkcjonalno\u015b\u0107 import assertions znalaz\u0142a si\u0119 w nieszcz\u0119\u015bliwych 10% i na poprzednim spotkaniu TC39, ze wzgl\u0119du na kilka istotnych w\u0105tpliwo\u015bci, zosta\u0142a cofni\u0119ta do etapu drugiego. Teraz wraca ona z powrotem do etapu trzeciego. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>O co chodzi z import assertions? Je\u015bli funkcjonalno\u015b\u0107 ta trafi do j\u0119zyka, b\u0119dziemy mogli bez problemu importowa\u0107 pliki JSON czy WebAssembly bezpo\u015brednio z poziomu JavaScriptu. Je\u015bli co\u015b Wam to przypomina, to podobne zachowanie mo\u017cna osi\u0105gn\u0105\u0107 przez odpowiedni\u0105 konfiguracj\u0119 webpacka.<\/p>\n","innerContent":["\n<p>O co chodzi z import assertions? Je\u015bli funkcjonalno\u015b\u0107 ta trafi do j\u0119zyka, b\u0119dziemy mogli bez problemu importowa\u0107 pliki JSON czy WebAssembly bezpo\u015brednio z poziomu JavaScriptu. Je\u015bli co\u015b Wam to przypomina, to podobne zachowanie mo\u017cna osi\u0105gn\u0105\u0107 przez odpowiedni\u0105 konfiguracj\u0119 webpacka.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import json from \".\/foo.json\" with { type: \"json\" };\nexport val from '.\/foo.js' with { type: \"javascript\" };\nnew Worker(\"foo.wasm\", { type: \"module\", with: { type: \"webassembly\" } });<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import json from \".\/foo.json\" with { type: \"json\" };\nexport val from '.\/foo.js' with { type: \"javascript\" };\nnew Worker(\"foo.wasm\", { type: \"module\", with: { type: \"webassembly\" } });<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-import-attributes\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - Import Attributes<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-import-attributes\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - Import Attributes<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Stage 2 - <code>Iterator.range()<\/code><\/h3>\n","innerContent":["\n<h3>Stage 2 - <code>Iterator.range()<\/code><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na pewno staneli\u015bcie kiedy\u015b przed potrzeb\u0105 wygenerowania listy liczb z odpowiedniego zakresu. J\u0119zyki takie jak Python czy Scala oferuj\u0105 tak\u0105 funkcjonalno\u015b\u0107 w bibliotece standardowej. Niestety do tej pory JavaScrtipt nie by\u0142 wyposa\u017cony w takie luksusy i skazani byli\u015bmy albo na korzystanie z zewn\u0119trznych bibliotek (np. <a href=\"https:\/\/lodash.com\/docs\/4.17.15#range\" target=\"_blank\" rel=\"noreferrer noopener\">lodash<\/a> lub <a href=\"https:\/\/underscorejs.org\/#range\" target=\"_blank\" rel=\"noreferrer noopener\">underscore<\/a>) albo na kilka pokr\u0119tnych hack\u00f3w (<a href=\"https:\/\/stackoverflow.com\/questions\/3895478\/does-javascript-have-a-method-like-range-to-generate-a-range-within-the-supp\" target=\"_blank\" rel=\"noreferrer noopener\">w\u0105tek na Stackoverflow<\/a> sugeruje ponad 20 mo\u017cliwych rozwi\u0105za\u0144!). Na szcz\u0119\u015bcie TC39 ju\u017c pracuje nad rozwi\u0105zaniem tego problemu. Co ciekawe nowa funkcja zwraca\u0107 b\u0119dzie iterator, co pozwoli nam w \u0142atwy spos\u00f3b operowa\u0107 na niesko\u0144czonych zbiorach.<\/p>\n","innerContent":["\n<p>Na pewno staneli\u015bcie kiedy\u015b przed potrzeb\u0105 wygenerowania listy liczb z odpowiedniego zakresu. J\u0119zyki takie jak Python czy Scala oferuj\u0105 tak\u0105 funkcjonalno\u015b\u0107 w bibliotece standardowej. Niestety do tej pory JavaScrtipt nie by\u0142 wyposa\u017cony w takie luksusy i skazani byli\u015bmy albo na korzystanie z zewn\u0119trznych bibliotek (np. <a href=\"https:\/\/lodash.com\/docs\/4.17.15#range\" target=\"_blank\" rel=\"noreferrer noopener\">lodash<\/a> lub <a href=\"https:\/\/underscorejs.org\/#range\" target=\"_blank\" rel=\"noreferrer noopener\">underscore<\/a>) albo na kilka pokr\u0119tnych hack\u00f3w (<a href=\"https:\/\/stackoverflow.com\/questions\/3895478\/does-javascript-have-a-method-like-range-to-generate-a-range-within-the-supp\" target=\"_blank\" rel=\"noreferrer noopener\">w\u0105tek na Stackoverflow<\/a> sugeruje ponad 20 mo\u017cliwych rozwi\u0105za\u0144!). Na szcz\u0119\u015bcie TC39 ju\u017c pracuje nad rozwi\u0105zaniem tego problemu. Co ciekawe nowa funkcja zwraca\u0107 b\u0119dzie iterator, co pozwoli nam w \u0142atwy spos\u00f3b operowa\u0107 na niesko\u0144czonych zbiorach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ odd number from 1 to 99\n[...Iterator.range(1, 100, 2)] \n\n\/\/ numbers from 1 to 1000 that are divisible by 3\nIterator.range(0, Infinity)\n    .take(1000)\n    .filter((x) => !(x % 3))\n    .toArray();\n\n\/\/ generator function yielding even numbers infinitely\nfunction* even() {\n    for (const i of Iterator.range(0, Infinity)) if (i % 2 === 0) yield i\n};<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ odd number from 1 to 99\n[...Iterator.range(1, 100, 2)] \n\n\/\/ numbers from 1 to 1000 that are divisible by 3\nIterator.range(0, Infinity)\n    .take(1000)\n    .filter((x) => !(x % 3))\n    .toArray();\n\n\/\/ generator function yielding even numbers infinitely\nfunction* even() {\n    for (const i of Iterator.range(0, Infinity)) if (i % 2 === 0) yield i\n};<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-iterator.range\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - Range<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-iterator.range\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - Range<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Stage 1 - Class method and consturcor decorators<\/h3>\n","innerContent":["\n<h3>Stage 1 - Class method and consturcor decorators<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/vived.io\/typescript-5-0-is-here-frontend-weekly-vol-129\/\" target=\"_blank\" rel=\"noreferrer noopener\">Niespe\u0142na kilka tygodni temu w naszym przegl\u0105dzie opisywali\u015bmy histori\u0119 dekorator\u00f3w w TypeScript i JavaScript<\/a>, a w tym tygodniu pojawi\u0142y si\u0119 nowy Proposal w tym temacie. Zgodnie z aktualnym <a href=\"https:\/\/github.com\/tc39\/proposal-decorators\" target=\"_blank\" rel=\"noreferrer noopener\">Proposalem znajduj\u0105cym si\u0119 w trzecim etapie standaryzacji<\/a>, dekorowane mog\u0105 by\u0107 tylko klasy i metody. Mocno ogranicza to tw\u00f3rc\u00f3w framework\u00f3w, bo dekorowanie parametr\u00f3w cz\u0119sto wykorzystywane jest w celu dostarczenia dodatkowego kontekstu dla Dependency Injection (np. <code>@Optional()<\/code> lub <code>@Inject(TOKEN)<\/code>) lub do automatycznej walidacji danych wej\u015bciowych (np. <code>@ValidateEmail()<\/code> lub <code>@NotEmpty()<\/code>). Omawiany na tym spotkaniu Proposal dodaje tak\u0105 w\u0142a\u015bnie mo\u017cliwo\u015b\u0107.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/vived.io\/typescript-5-0-is-here-frontend-weekly-vol-129\/\" target=\"_blank\" rel=\"noreferrer noopener\">Niespe\u0142na kilka tygodni temu w naszym przegl\u0105dzie opisywali\u015bmy histori\u0119 dekorator\u00f3w w TypeScript i JavaScript<\/a>, a w tym tygodniu pojawi\u0142y si\u0119 nowy Proposal w tym temacie. Zgodnie z aktualnym <a href=\"https:\/\/github.com\/tc39\/proposal-decorators\" target=\"_blank\" rel=\"noreferrer noopener\">Proposalem znajduj\u0105cym si\u0119 w trzecim etapie standaryzacji<\/a>, dekorowane mog\u0105 by\u0107 tylko klasy i metody. Mocno ogranicza to tw\u00f3rc\u00f3w framework\u00f3w, bo dekorowanie parametr\u00f3w cz\u0119sto wykorzystywane jest w celu dostarczenia dodatkowego kontekstu dla Dependency Injection (np. <code>@Optional()<\/code> lub <code>@Inject(TOKEN)<\/code>) lub do automatycznej walidacji danych wej\u015bciowych (np. <code>@ValidateEmail()<\/code> lub <code>@NotEmpty()<\/code>). Omawiany na tym spotkaniu Proposal dodaje tak\u0105 w\u0142a\u015bnie mo\u017cliwo\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">class UserManager {\n  createUser(@NotEmpty username, @NotEmpty password, @ValidateEmail emailAddress) { }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">class UserManager {\n  createUser(@NotEmpty username, @NotEmpty password, @ValidateEmail emailAddress) { }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-class-method-parameter-decorators\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - Class method and consturcor decorators<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-class-method-parameter-decorators\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - Class method and consturcor decorators<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Stage 1 - <code>Promise.withResolvers<\/code><\/h3>\n","innerContent":["\n<h3>Stage 1 - <code>Promise.withResolvers<\/code><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Standardowym sposobem na stworzenie obiektu Promise jest przekazanie do konstruktora odpowiedniego callbacka.<\/p>\n","innerContent":["\n<p>Standardowym sposobem na stworzenie obiektu Promise jest przekazanie do konstruktora odpowiedniego callbacka.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const myPromise = new Promise((resolve, reject) => {\n  \/* Some code *\/\n  if(result) {\n    resolve(\"Ok\")\n  } else {\n    reject(new Error(\"Rejected\"))\n  }\n})<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const myPromise = new Promise((resolve, reject) => {\n  \/* Some code *\/\n  if(result) {\n    resolve(\"Ok\")\n  } else {\n    reject(new Error(\"Rejected\"))\n  }\n})<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na problem napotykamy w momencie, kiedy Promise chcemy obs\u0142u\u017cy\u0107 spoza poziomy callbacka. Jest to oczywi\u015bcie mo\u017cliwe, ale wymaga napisania kawa\u0142ka niezbyt \u0142adnego kodu.<\/p>\n","innerContent":["\n<p>Na problem napotykamy w momencie, kiedy Promise chcemy obs\u0142u\u017cy\u0107 spoza poziomy callbacka. Jest to oczywi\u015bcie mo\u017cliwe, ale wymaga napisania kawa\u0142ka niezbyt \u0142adnego kodu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">let resolve;\nlet reject;\nconst myPromise = new Promise((resolve_, reject_) => {\n  resolve = resolve_;\n  reject = reject_;\n})\n\/* Some code *\/\nif(result) {\n  resolve(\"Ok\")\n} else {\n  reject(new Error(\"Rejected\"))\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">let resolve;\nlet reject;\nconst myPromise = new Promise((resolve_, reject_) => {\n  resolve = resolve_;\n  reject = reject_;\n})\n\/* Some code *\/\nif(result) {\n  resolve(\"Ok\")\n} else {\n  reject(new Error(\"Rejected\"))\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowo zaproponowane API oferowa\u0107 ma czytelniejsze rozwi\u0105zanie tego problemu.<\/p>\n","innerContent":["\n<p>Nowo zaproponowane API oferowa\u0107 ma czytelniejsze rozwi\u0105zanie tego problemu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const { promise, resolve, reject } = Promise.withResolvers();\n\/* Some code *\/\nif(result) {\n  resolve(\"Ok\")\n} else {\n  reject(new Error(\"Rejected\"))\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const { promise, resolve, reject } = Promise.withResolvers();\n\/* Some code *\/\nif(result) {\n  resolve(\"Ok\")\n} else {\n  reject(new Error(\"Rejected\"))\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-promise-with-resolvers\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - <code>Promise.withResolvers<\/code><\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/github.com\/tc39\/proposal-promise-with-resolvers\" target=\"_blank\" rel=\"noreferrer noopener\">TC39 Proposal - <code>Promise.withResolvers<\/code><\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Generyki zmierzaj\u0105 do Vue Single File Components<\/h2>\n","innerContent":["\n<h2>3. Generyki zmierzaj\u0105 do Vue Single File Components<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/twitter.com\/micheldpcarlos\/status\/1629482943700672525?s=46&t=6nzx63EMfowtR7VRHgVUIA","type":"rich","providerNameSlug":"twitter","responsive":true,"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/micheldpcarlos\/status\/1629482943700672525?s=46&amp;t=6nzx63EMfowtR7VRHgVUIA\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/micheldpcarlos\/status\/1629482943700672525?s=46&amp;t=6nzx63EMfowtR7VRHgVUIA\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Vue 3.3 zbli\u017ca si\u0119 wielkimi krokami i powoli zaczynaj\u0105 do nas sp\u0142ywa\u0107 informacje o zmierzaj\u0105cych do niego funkcjonalno\u015bciach. <a href=\"https:\/\/github.com\/vuejs\/rfcs\/discussions\/436#discussioncomment-4907987\" target=\"_blank\" rel=\"noreferrer noopener\">W tym tygodniu Evan You zdradzi\u0142, \u017ce do najnowszej wersji frameworka trafi\u0105 generyczne komponenty.<\/a> Jest to jedna z d\u0142u\u017cej wyczekiwanych funkcjonalno\u015bci Vue, bo <a href=\"https:\/\/github.com\/vuejs\/core\/issues\/3102\" target=\"_blank\" rel=\"noreferrer noopener\">pierwsze dyskusje na jej temat mia\u0142y miejsce ju\u017c w 2021 roku<\/a>!<\/p>\n","innerContent":["\n<p>Vue 3.3 zbli\u017ca si\u0119 wielkimi krokami i powoli zaczynaj\u0105 do nas sp\u0142ywa\u0107 informacje o zmierzaj\u0105cych do niego funkcjonalno\u015bciach. <a href=\"https:\/\/github.com\/vuejs\/rfcs\/discussions\/436#discussioncomment-4907987\" target=\"_blank\" rel=\"noreferrer noopener\">W tym tygodniu Evan You zdradzi\u0142, \u017ce do najnowszej wersji frameworka trafi\u0105 generyczne komponenty.<\/a> Jest to jedna z d\u0142u\u017cej wyczekiwanych funkcjonalno\u015bci Vue, bo <a href=\"https:\/\/github.com\/vuejs\/core\/issues\/3102\" target=\"_blank\" rel=\"noreferrer noopener\">pierwsze dyskusje na jej temat mia\u0142y miejsce ju\u017c w 2021 roku<\/a>!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"xml"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\">&lt;script\n  setup\n  lang=\"ts\"\n  generic=\"Clearable extends boolean, ValueType extends string | number | null | undefined\"\n>\n  defineProps&lt;{\n    clearable?: Clearable;\n    value?: ValueType;;\n  }>\n&lt;\/script><\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\">&lt;script\n  setup\n  lang=\"ts\"\n  generic=\"Clearable extends boolean, ValueType extends string | number | null | undefined\"\n>\n  defineProps&lt;{\n    clearable?: Clearable;\n    value?: ValueType;;\n  }>\n&lt;\/script><\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>4. Microsoft zmigrowa\u0142 Teamsy do WebView2<\/h2>\n","innerContent":["\n<h2>4. Microsoft zmigrowa\u0142 Teamsy do WebView2<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na zako\u0144czenie dzisiejszego przegl\u0105du mamy dla Was Case Study od Microsoftu, kt\u00f3ry w\u0142a\u015bnie zako\u0144czy\u0142 migracj\u0119 Microsoft Teams z AngularJS do Reacta oraz z Electrona do WebView2. Dla przypomnienia WebView2, to w uproszczeniu technologia umo\u017cliwaj\u0105ca embedowanie w natywnych aplikacjach Microsoft Edge. Czym jest React i AngularJS chyba nikomu nie musimy przypomina\u0107.<\/p>\n","innerContent":["\n<p>Na zako\u0144czenie dzisiejszego przegl\u0105du mamy dla Was Case Study od Microsoftu, kt\u00f3ry w\u0142a\u015bnie zako\u0144czy\u0142 migracj\u0119 Microsoft Teams z AngularJS do Reacta oraz z Electrona do WebView2. Dla przypomnienia WebView2, to w uproszczeniu technologia umo\u017cliwaj\u0105ca embedowanie w natywnych aplikacjach Microsoft Edge. Czym jest React i AngularJS chyba nikomu nie musimy przypomina\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15450,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/yg3g96eymct41.jpeg\" alt=\"\" class=\"wp-image-15450\"\/><figcaption class=\"wp-element-caption\">\u0179r\u00f3d\u0142o: <a href=\"https:\/\/www.reddit.com\/r\/memes\/comments\/g2yvrf\/anyone_else_using_microsoft_teams_for_school\/\" target=\"_blank\" rel=\"noreferrer noopener\">Reddit<\/a><\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/yg3g96eymct41.jpeg\" alt=\"\" class=\"wp-image-15450\"\/><figcaption class=\"wp-element-caption\">\u0179r\u00f3d\u0142o: <a href=\"https:\/\/www.reddit.com\/r\/memes\/comments\/g2yvrf\/anyone_else_using_microsoft_teams_for_school\/\" target=\"_blank\" rel=\"noreferrer noopener\">Reddit<\/a><\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Migracja przynios\u0142a znacz\u0105c\u0105 popraw\u0119 zar\u00f3wno je\u015bli chodzi o zu\u017cycie pami\u0119ci jak i procesora. Uaktualniona wersja zacz\u0119\u0142a ju\u017c trafia\u0107 do \"regularnych klient\u00f3w\", a wkr\u00f3tce zacznie r\u00f3wnie\u017c trafia\u0107 do tych komercyjnych. Je\u015bli jeste\u015bcie ciekawi jak wygl\u0105da teraz architektura Microsoft Teams i gdzie uda\u0142o si\u0119 ugra\u0107 najwi\u0119cej, to wszystkiego dowiecie si\u0119 z notatki podlinkowanej poni\u017cej.<\/p>\n","innerContent":["\n<p>Migracja przynios\u0142a znacz\u0105c\u0105 popraw\u0119 zar\u00f3wno je\u015bli chodzi o zu\u017cycie pami\u0119ci jak i procesora. Uaktualniona wersja zacz\u0119\u0142a ju\u017c trafia\u0107 do \"regularnych klient\u00f3w\", a wkr\u00f3tce zacznie r\u00f3wnie\u017c trafia\u0107 do tych komercyjnych. Je\u015bli jeste\u015bcie ciekawi jak wygl\u0105da teraz architektura Microsoft Teams i gdzie uda\u0142o si\u0119 ugra\u0107 najwi\u0119cej, to wszystkiego dowiecie si\u0119 z notatki podlinkowanej poni\u017cej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/techcommunity.microsoft.com\/t5\/microsoft-teams-blog\/microsoft-teams-advantages-of-the-new-architecture\/ba-p\/3775704\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Teams: Advantages of the new architecture<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/techcommunity.microsoft.com\/t5\/microsoft-teams-blog\/microsoft-teams-advantages-of-the-new-architecture\/ba-p\/3775704\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Teams: Advantages of the new architecture<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15435","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=15435"}],"version-history":[{"count":16,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15435\/revisions"}],"predecessor-version":[{"id":15459,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15435\/revisions\/15459"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/15445"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=15435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=15435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=15435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}