{"id":9898,"date":"2022-09-09T14:25:53","date_gmt":"2022-09-09T12:25:53","guid":{"rendered":"https:\/\/vived.io\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/"},"modified":"2022-09-19T13:16:23","modified_gmt":"2022-09-19T11:16:23","slug":"signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/","title":{"rendered":"Signal &#8211; nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji &#8211; Frontend Weekly vol. 104"},"content":{"rendered":"\n<h2 id=\"1-signals-nowa-biblioteka-do-zarzadzania-stanem-aplikacji-od-tworcow-preact\" data-num=1>1. Signals &#8211; nowa biblioteka do zarz\u0105dzania stanem aplikacji od tw\u00f3rc\u00f3w Preact<\/h2>\n\n\n\n<p>Obserwuj\u0105c ilo\u015b\u0107 dost\u0119pnych bibliotek, dyskusji i opinii na temat zarz\u0105dzania stanem aplikacji w Reactie, mo\u017cna odnie\u015b\u0107, \u017ce jest to swego rodzaju fetysz tej spo\u0142eczno\u015bci. W tym tygodniu mamy co\u015b specjalnego dla wszystkich fanatyk\u00f3w stanu aplikacji &#8211; now\u0105 bibliotek\u0119 od tw\u00f3rc\u00f3w Preacta.\r\n<\/p>\n\n\n\n<p>Nowa biblioteka nazywa si\u0119 Signals. Je\u015bli gdzie\u015b z ty\u0142u g\u0142owy \u015bwita Wam, \u017ce gdzie\u015b ju\u017c to s\u0142yszeli\u015bcie, to macie racj\u0119. SolidJS, czyli alternatywa dla Reacta bez Shadow DOM, zamiast `useState` pos\u0142uguje si\u0119 w\u0142a\u015bnie `useSignal`. Signala z Preact i SolidJS \u0142\u0105czy ca\u0142kiem sporo, jednak zdecydowanie nie s\u0105 to dwie to\u017csame koncepcje.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image10.jpg\" alt=\"\" class=\"wp-image-9874\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image10.jpg 800w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image10-300x188.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image10-768x480.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure><\/div>\n\n\n<p>Zacznijmy jednak od motywacji tw\u00f3rc\u00f3w Preacta do stworzenia kolejnej biblioteki do zarz\u0105dzania stanem. Jak to zwykle bywa, wszystkie dost\u0119pne na rynku rozwi\u0105zania nie zaspokaja\u0142y potrzeb autor\u00f3w biblioteki. Narz\u0119dzie takie jak Redux czy MobX wprowadzaj\u0105 sporo boilerplate\u2019u, a ich wydajno\u015b\u0107 jest dyskusyjna. Proste podej\u015bcie z useState sprawdza si\u0119 w pocz\u0105tkowych etapach \u017cycia aplikacji, ale wraz z jej rozrostem zaczyna cierpie\u0107 na problemy z props-drilling i niewydajnym renderowaniem. Konteksty, kt\u00f3re staj\u0105 si\u0119 w takim momencie naturaln\u0105 alternatyw\u0105, r\u00f3wnie\u017c nie s\u0105 idealne. Pozwalaj\u0105 co prawda \u201cprzeskoczy\u0107\u201d przez kilka poziom\u00f3w VirtualDOM, ale ich liczba szybko ro\u015bnie, a odpowiednia optymalizacja wymaga zr\u0119cznego pos\u0142ugiwania si\u0119 memonizacj\u0105.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"617\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image5.jpg\" alt=\"\" class=\"wp-image-9876\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image5.jpg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image5-243x300.jpg 243w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Signal w swojej koncepcji jest pewnym pude\u0142kiem na warto\u015b\u0107. Kiedy warto\u015b\u0107 w pude\u0142ku zmienia si\u0119, automatycznie aktualizowane s\u0105 warto\u015bci we wszystkich pude\u0142kach zale\u017cnych. Proces powtarza si\u0119, a\u017c wszystkie pude\u0142ka zostan\u0105 zaktualizowane. Na pierwszy rzut oka bardzo przypomina to po\u0142\u0105czenie useState i useEffect, ale zwr\u00f3\u0107cie uwag\u0119, \u017ce sygna\u0142 definiowany jest globalnie. Umo\u017cliwia to w momencie zmiany warto\u015bci w pude\u0142ku, od\u015bwie\u017cenie tylko tych komponent\u00f3w w VirtualDOM, kt\u00f3re od niego zale\u017c\u0105. <\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { signal, computed } from &quot;@preact\/signals&quot;;\n\nconst count = signal(0);\nconst double = computed(() =&gt; count.value * 2);\neffect(() =&gt; console.log(double.value)));\n\nfunction Counter() {\n  return (\n    &lt;button onClick={() =&gt; count.value++}&gt;\n      {count} x 2 = {double}\n    &lt;\/button&gt;\n  );\n}<\/code><\/pre>\n\n\n\n<p>To oczywi\u015bcie jeszcze nie koniec zalet Signals. Na przestrzeni \u017cycia aplikacji, referencja sygna\u0142u nie zmienia si\u0119, wi\u0119c nie musimy obawia\u0107 si\u0119 niechcianych render\u00f3w. Zar\u00f3wno funkcja `computed` jak i `effect` nie wymaga listy zale\u017cno\u015bci i wykrywa je automatycznie. Co wi\u0119cej, je\u015bli zale\u017cno\u015bci ulegn\u0105 zmianie, ale ko\u0144cowa warto\u015b\u0107 pozostaje taka sama, dalsze zale\u017cno\u015bci nie b\u0119d\u0105 od\u015bwie\u017cane.<\/p>\n\n\n\n<p>Signals to biblioteka napisana w czystym JavaScript, ale jak widzieli\u015bcie na przyk\u0142adach powy\u017cej, autorzy zadbali o przygotowanie specjalnych integracji zar\u00f3wno z Preact jak i React. Szczeg\u00f3lnie ciekawie prezentuje si\u0119 ta pierwsza. Je\u015bli w JSX wykorzystamy signal, zamiast signal.value, to b\u0119dzie on traktowany jako osobny komponent. To oznacza, \u017ce je\u015bli zmieni si\u0119 jego warto\u015b\u0107, Preact zamiast renderowa\u0107 ca\u0142y komponent rodzic, od\u015bwie\u017cy tylko kr\u00f3tki fragment tekstu.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ In this example whole Counter component will be re-rendered on count change\nconst count = signal(0);\n\nfunction Counter() {\n return (\n    &lt;&gt;\n       &lt;SomeOtherComponent\/&gt;\n       Value: {count.value}\n    &lt;\/&gt; \n  );\n}\n\n\/\/ In this example only count value will re-render on count change\nconst count = signal(0);\n\nfunction Counter() {\n return (\n    &lt;&gt;\n       &lt;SomeOtherComponent\/&gt;\n       Value: {count}\n    &lt;\/&gt; \n  );\n}\n<\/code><\/pre>\n\n\n\n<p>Je\u015bli zastanawiacie si\u0119, jak to mo\u017cliwe, \u017ce ca\u0142a ta magia dzia\u0142a, to wybra\u0142em si\u0119 w podr\u00f3\u017c do kodu \u017ar\u00f3d\u0142owego za Was. Signals to tak naprawd\u0119 prosta implementacja wzorca projektowego obserwator (ach te polskie nazwy <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"409\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image6.jpg\" alt=\"\" class=\"wp-image-9878\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image6.jpg 615w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image6-300x200.jpg 300w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/figure><\/div>\n\n\n<p>Na zako\u0144czenie ma\u0142y bonus dla wszystkich Angularowc\u00f3w, kt\u00f3rzy dotarli a\u017c do ko\u0144ca tej sekcji. Kiedy tw\u00f3rcy Signals pisali, \u017ce biblioteka mo\u017ce by\u0107 wykorzystywana z dowolnym frameworkiem, to naprawd\u0119 nie \u017cartowali. Na twitterze dokopa\u0142em si\u0119 do bajecznie prostej integracji z flagowym frameworkiem od Google. Dodanie do niej obs\u0142ugi ChangeDetection.OnPush to zaledwie kilka linijek kodu i znajdziecie j\u0105 w pierwszej odpowiedzi w\u0105tku. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"679\" height=\"498\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image1.jpg\" alt=\"\" class=\"wp-image-9880\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image1.jpg 679w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image1-300x220.jpg 300w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><figcaption>\u0179r\u00f3d\u0142o: <a href=\"https:\/\/twitter.com\/ashh640\/status\/1567469254034825216?s=20&amp;t=ayfvUBJOY9u9ie4s7VzTpQ\">https:\/\/twitter.com\/ashh640\/status\/1567469254034825216?s=20&amp;t=ayfvUBJOY9u9ie4s7VzTpQ<\/a><\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/preactjs.com\/blog\/introducing-signals\/\">https:\/\/preactjs.com\/blog\/introducing-signals\/<\/a><\/li><li><a href=\"https:\/\/twitter.com\/_developit\/status\/1567209440843022341 \">https:\/\/twitter.com\/_developit\/status\/1567209440843022341 <\/a><\/li><\/ul>\n\n\n\n<h2 id=\"2-react-native-0-70-hermes-wreszcie-domyslny\" data-num=2>2. React Native 0.70 &#8211; Hermes wreszcie domy\u015blny<\/h2>\n\n\n\n<p>O nowym, szybszym i lepszym silniku renderowania dla React Native s\u0142yszy si\u0119 ju\u017c od dawna. Po raz pierwszy zosta\u0142 on zaprezentowany \u015bwiatu w po\u0142owie 2019 roku i dedykowany by\u0142 dla telefon\u00f3w z Androidem na pok\u0142adzie.<\/p>\n\n\n\n<p> W Wi\u015ble up\u0142yn\u0119\u0142o sporo wody, zanim zesp\u00f3\u0142 Facebooka przygotowa\u0142 r\u00f3wnie\u017c wersj\u0119 na system iOS. Wywo\u0142a\u0142o to jednak ma\u0142\u0105 furor\u0119, bo by\u0142o pierwszym przypadkiem kiedy na urz\u0105dzeniach z jab\u0142uszkiem dzia\u0142a\u0142 silnik inny ni\u017c JavaScriptCore. Co wi\u0119cej, dzia\u0142o si\u0119 to za przyzwoleniem samego Apple.<\/p>\n\n\n\n<p>Niespe\u0142na p\u00f3\u0142 roku temu, zesp\u00f3\u0142 React Native og\u0142osi\u0142, \u017ce Hermes jest ju\u017c na tyle stabilny, \u017ce wkr\u00f3tce stanie si\u0119 domy\u015blnym silnikiem JavaScript dla ich frameworku. W tym tygodniu, wraz z premier\u0105 React Native 0.70, wreszcie doczekali\u015bmy tej historycznej chwili.<\/p>\n\n\n\n<p>Pozosta\u0142e nowo\u015bci w React Native 0.70 dotycz\u0105 g\u0142\u00f3wnie nowej eksperymentalnej architektury. Dla przypomnienia sk\u0142adaj\u0105 si\u0119 na ni\u0105 Turbo Modules (wydajna integracja z natywnym kodem), Fabric Renderer (nowy renderer, kt\u00f3ry ma ujednolici\u0107 dzia\u0142anie pomi\u0119dzy platformami) oraz Codegen (automatyczne generowanie niezb\u0119dnych plik\u00f3w C++). Wszystkich zainteresowanych szczeg\u00f3\u0142ami na pewno ucieszy fakt, \u017ce jedn\u0105 z nowo\u015bci jest zupe\u0142nie nowa dokumentacja. <\/p>\n\n\n\n<p>W poszukiwaniu daty premiery nowej architektury przeczesa\u0142em zar\u00f3wno dokumentacj\u0119, jak i bloga React Native. C\u00f3\u017c, na razie wszystko wskazuje na to, \u017ce pozostanie ona jeszcze d\u0142ugo w fazie eksperymentalnej.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"648\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image4.jpg\" alt=\"\" class=\"wp-image-9882\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image4.jpg 576w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image4-267x300.jpg 267w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption>\u0179r\u00f3d\u0142o: https:\/\/devs.lol\/meme\/waiting-for-react-native-1-0-javascript-267<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/reactnative.dev\/blog\/2022\/09\/05\/version-070\">https:\/\/reactnative.dev\/blog\/2022\/09\/05\/version-070<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"3-uwolnic-javascript-list-otwarty-tworcy-node-js-i-deno\" data-num=3>3. Uwolni\u0107 JavaScript! &#8211; list otwarty tw\u00f3rcy Node.js i Deno<\/h2>\n\n\n\n<p>Historia JavaScript jest szalona i pe\u0142na zawirowa\u0144. Zw\u0142aszcza jej pocz\u0105tki i legenda o stworzeniu ca\u0142ego j\u0119zyka w 10 dni. Na pewno nie raz ju\u017c j\u0105 s\u0142yszeli\u015bcie, ale i tak nie odm\u00f3wi\u0119 sobie jej przytoczenia. <\/p>\n\n\n\n<p>Jest rok 1995 i Brendan Eich pracuje w\u0142a\u015bnie w Netscape. W wolnym czasie lubi on projektowa\u0107 swoje w\u0142asne, proste j\u0119zyki programowania. Pewnego dnia w pracy dostaje szans\u0119 wykorzysta\u0107  do\u015bwiadczenie zdobyte po godzinach i dostaje zadanie stworzenia j\u0119zyka skryptowego na potrzeby flagowego produktu firmy. Na wykonanie zadania dostaje zatrwa\u017caj\u0105ce 10 dni, ale mimo wszystko zakasa r\u0119kawy i bierze si\u0119 do roboty. W trakcie rozmowy przy kawie z jednym z koleg\u00f3w z biura przyznaje, \u017ce jego j\u0119zyk przetrwa kilka tygodni, albo 20 lat. No c\u00f3\u017c, niewiele si\u0119 pomyli\u0142.<\/p>\n\n\n\n<p>Powi\u0105zania mi\u0119dzy Jav\u0105, a JavaScriptem r\u00f3wnie\u017c nie s\u0105 przypadkowe. Lata dziewi\u0119\u0107dziesi\u0105te to okres, kiedy programowanie w Javie by\u0142o cool, a programi\u015bci C++ z ut\u0119sknieniem patrzyli na projekty pisane w\u0142a\u015bnie w obiektowej Javie. Pod mod\u0119 na Jav\u0119 chcia\u0142 si\u0119 podpi\u0105\u0107 r\u00f3wnie\u017c Netscape ze swoim nowo powsta\u0142ym j\u0119zykiem. Mia\u0142 on nie tylko przypomina\u0107 Jav\u0119, ale r\u00f3wnie\u017c jego nazwa powinna kojarzy\u0107 si\u0119 od razu z najbardziej po\u017c\u0105danym j\u0119zykiem na rynku. W ten spos\u00f3b narodzi\u0142 si\u0119 JavaScript. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image7.jpg\" alt=\"\" class=\"wp-image-9884\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image7.jpg 750w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image7-300x200.jpg 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>Jak wiemy, historia sukcesu Netscape nie trwa\u0142a d\u0142ugo. W 1999 roku firma Netscape po\u0142\u0105czona zosta\u0142a z firm\u0105 America Online (AOL). Po zako\u0144czeniu procesu po\u0142\u0105czenia, firma wesz\u0142a r\u00f3wnie\u017c w \u015bcis\u0142\u0105 wsp\u00f3\u0142prac\u0119 z Sun Microsystems. W 2002 roku wsp\u00f3\u0142praca zosta\u0142a zako\u0144czona, a w wyniku zawirowa\u0144 znak towarowy JavaScript pozosta\u0142 w r\u0119kach Sun Microsystem. W 2009 roku firma ta zosta\u0142a skolei kupiona wraz ze znakiem towarowym przez Oracle.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image2.jpg\" alt=\"\" class=\"wp-image-9886\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image2.jpg 666w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image2-300x225.jpg 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/figure><\/div>\n\n\n<p>Na dzie\u0144 dzisiejszy Oracle nie wykorzystuje nigdzie znaku towarowego JavaScript. Firma nie uczestniczy r\u00f3wnie\u017c aktywnie w jego rozwoju w ramach ECMAScript. To w\u0142a\u015bnie do tego faktu odnosi si\u0119 w g\u0142\u00f3wnej mierze argumentacja Ryan Dahla, w jego otwartym li\u015bcie do Oracle. Prosi on w nim o zmian\u0119 licencji znaku towarowego JavaScript i przekazanie go w r\u0119ce spo\u0142eczno\u015bci. Gdyby tak si\u0119 wydarzy\u0142o ECMAScript m\u00f3g\u0142by wreszcie sta\u0107 si\u0119 po prostu JavaScriptem lub JavaScript Standard Committee. Ci\u0119\u017cko nie zgodzi\u0107 si\u0119, \u017ce znacz\u0105co upro\u015bci\u0142oby to ca\u0142\u0105 sytuacj\u0119 nazewnicz\u0105. Je\u015bli jeste\u015bcie zainteresowani, to oryginaln\u0105 tre\u015b\u0107 listu znajdziecie w \u017ar\u00f3d\u0142ach poni\u017cej.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"749\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image9.jpg\" alt=\"\" class=\"wp-image-9888\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image9.jpg 749w, https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image9-300x200.jpg 300w\" sizes=\"auto, (max-width: 749px) 100vw, 749px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/tinyclouds.org\/trademark\">https:\/\/tinyclouds.org\/trademark<\/a><\/li><li><a href=\"https:\/\/devclass.com\/2022\/09\/05\/node-js-creator-ryan-dahl-urges-oracle-to-release-javascript-trademark\/ \">https:\/\/devclass.com\/2022\/09\/05\/node-js-creator-ryan-dahl-urges-oracle-to-release-javascript-trademark\/ <\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=3-9fnjzmXWA\">https:\/\/www.youtube.com\/watch?v=3-9fnjzmXWA<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Nowych bibliotek do zarz\u0105dzania stanem aplikacji nigdy do\u015b\u0107 (mo\u017ce, do czasu, a\u017c kt\u00f3ra\u015b naprawd\u0119 spe\u0142ni wszystkie obietnice). W tym tygodniu kolejn\u0105 bibliotek\u0119 do kolekcji zaprezentowali tw\u00f3rcy Preacta. Musz\u0119 przyzna\u0107, \u017ce jest naprawd\u0119 minimalistycznie, a przy tym wydajnie. Zainteresowani?<\/p>\n","protected":false},"author":12,"featured_media":9871,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-9898","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"7","feature_image_blog":{"ID":9873,"id":9873,"title":"image8","filename":"image8.jpg","filesize":125167,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8.jpg","link":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/image8-2\/","alt":"","author":"15","description":"","caption":"","name":"image8-2","status":"inherit","uploaded_to":9898,"date":"2022-09-09 12:15:57","modified":"2022-09-09 12:45:39","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1999,"height":1330,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8-150x150.jpg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8-300x200.jpg","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8-768x511.jpg","medium_large-width":768,"medium_large-height":511,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8-1024x681.jpg","large-width":1024,"large-height":681,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8-1536x1022.jpg","1536x1536-width":1536,"1536x1536-height":1022,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8.jpg","2048x2048-width":1999,"2048x2048-height":1330,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8.jpg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8.jpg","gform-image-choice-md-width":400,"gform-image-choice-md-height":266,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image8.jpg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":399}},"push_notification_image":false,"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>Signal - nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji - Frontend Weekly vol. 104 - 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\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Signal - nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji - Frontend Weekly vol. 104 - Vived\" \/>\n<meta property=\"og:description\" content=\"Nowych bibliotek do zarz\u0105dzania stanem aplikacji nigdy do\u015b\u0107 (mo\u017ce, do czasu, a\u017c kt\u00f3ra\u015b naprawd\u0119 spe\u0142ni wszystkie obietnice). W tym tygodniu kolejn\u0105 bibliotek\u0119 do kolekcji zaprezentowali tw\u00f3rcy Preacta. Musz\u0119 przyzna\u0107, \u017ce jest naprawd\u0119 minimalistycznie, a przy tym wydajnie. Zainteresowani?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-09T12:25:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.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\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Signal &#8211; nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji &#8211; Frontend Weekly vol. 104\",\"datePublished\":\"2022-09-09T12:25:53+00:00\",\"dateModified\":\"2022-09-19T11:16:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/\"},\"wordCount\":1331,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/\",\"url\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/\",\"name\":\"Signal - nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji - Frontend Weekly vol. 104 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png\",\"datePublished\":\"2022-09-09T12:25:53+00:00\",\"dateModified\":\"2022-09-19T11:16:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Signal &#8211; nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji &#8211; Frontend Weekly vol. 104\"}]},{\"@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":"Signal - nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji - Frontend Weekly vol. 104 - 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\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/","og_locale":"pl_PL","og_type":"article","og_title":"Signal - nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji - Frontend Weekly vol. 104 - Vived","og_description":"Nowych bibliotek do zarz\u0105dzania stanem aplikacji nigdy do\u015b\u0107 (mo\u017ce, do czasu, a\u017c kt\u00f3ra\u015b naprawd\u0119 spe\u0142ni wszystkie obietnice). W tym tygodniu kolejn\u0105 bibliotek\u0119 do kolekcji zaprezentowali tw\u00f3rcy Preacta. Musz\u0119 przyzna\u0107, \u017ce jest naprawd\u0119 minimalistycznie, a przy tym wydajnie. Zainteresowani?","og_url":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/","og_site_name":"Vived","article_published_time":"2022-09-09T12:25:53+00:00","article_modified_time":"2022-09-19T11:16:23+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/blog.vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.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\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Signal &#8211; nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji &#8211; Frontend Weekly vol. 104","datePublished":"2022-09-09T12:25:53+00:00","dateModified":"2022-09-19T11:16:23+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/"},"wordCount":1331,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/","url":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/","name":"Signal - nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji - Frontend Weekly vol. 104 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png","datePublished":"2022-09-09T12:25:53+00:00","dateModified":"2022-09-19T11:16:23+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/frontend104-pl.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/signal-nowy-sposob-na-zarzadzanie-stanem-aplikacji-frontend-weekly-vol-104\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Signal &#8211; nowy spos\u00f3b na zarz\u0105dzanie stanem aplikacji &#8211; Frontend Weekly vol. 104"}]},{"@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. Signals - nowa biblioteka do zarz\u0105dzania stanem aplikacji od tw\u00f3rc\u00f3w Preact<\/h2>\n","innerContent":["\n<h2>1. Signals - nowa biblioteka do zarz\u0105dzania stanem aplikacji od tw\u00f3rc\u00f3w Preact<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Obserwuj\u0105c ilo\u015b\u0107 dost\u0119pnych bibliotek, dyskusji i opinii na temat zarz\u0105dzania stanem aplikacji w Reactie, mo\u017cna odnie\u015b\u0107, \u017ce jest to swego rodzaju fetysz tej spo\u0142eczno\u015bci. W tym tygodniu mamy co\u015b specjalnego dla wszystkich fanatyk\u00f3w stanu aplikacji - now\u0105 bibliotek\u0119 od tw\u00f3rc\u00f3w Preacta.\r\n<\/p>\n","innerContent":["\n<p>Obserwuj\u0105c ilo\u015b\u0107 dost\u0119pnych bibliotek, dyskusji i opinii na temat zarz\u0105dzania stanem aplikacji w Reactie, mo\u017cna odnie\u015b\u0107, \u017ce jest to swego rodzaju fetysz tej spo\u0142eczno\u015bci. W tym tygodniu mamy co\u015b specjalnego dla wszystkich fanatyk\u00f3w stanu aplikacji - now\u0105 bibliotek\u0119 od tw\u00f3rc\u00f3w Preacta.\r\n<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowa biblioteka nazywa si\u0119 Signals. Je\u015bli gdzie\u015b z ty\u0142u g\u0142owy \u015bwita Wam, \u017ce gdzie\u015b ju\u017c to s\u0142yszeli\u015bcie, to macie racj\u0119. SolidJS, czyli alternatywa dla Reacta bez Shadow DOM, zamiast `useState` pos\u0142uguje si\u0119 w\u0142a\u015bnie `useSignal`. Signala z Preact i SolidJS \u0142\u0105czy ca\u0142kiem sporo, jednak zdecydowanie nie s\u0105 to dwie to\u017csame koncepcje.<\/p>\n","innerContent":["\n<p>Nowa biblioteka nazywa si\u0119 Signals. Je\u015bli gdzie\u015b z ty\u0142u g\u0142owy \u015bwita Wam, \u017ce gdzie\u015b ju\u017c to s\u0142yszeli\u015bcie, to macie racj\u0119. SolidJS, czyli alternatywa dla Reacta bez Shadow DOM, zamiast `useState` pos\u0142uguje si\u0119 w\u0142a\u015bnie `useSignal`. Signala z Preact i SolidJS \u0142\u0105czy ca\u0142kiem sporo, jednak zdecydowanie nie s\u0105 to dwie to\u017csame koncepcje.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9874,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image10.jpg\" alt=\"\" class=\"wp-image-9874\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image10.jpg\" alt=\"\" class=\"wp-image-9874\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy jednak od motywacji tw\u00f3rc\u00f3w Preacta do stworzenia kolejnej biblioteki do zarz\u0105dzania stanem. Jak to zwykle bywa, wszystkie dost\u0119pne na rynku rozwi\u0105zania nie zaspokaja\u0142y potrzeb autor\u00f3w biblioteki. Narz\u0119dzie takie jak Redux czy MobX wprowadzaj\u0105 sporo boilerplate\u2019u, a ich wydajno\u015b\u0107 jest dyskusyjna. Proste podej\u015bcie z useState sprawdza si\u0119 w pocz\u0105tkowych etapach \u017cycia aplikacji, ale wraz z jej rozrostem zaczyna cierpie\u0107 na problemy z props-drilling i niewydajnym renderowaniem. Konteksty, kt\u00f3re staj\u0105 si\u0119 w takim momencie naturaln\u0105 alternatyw\u0105, r\u00f3wnie\u017c nie s\u0105 idealne. Pozwalaj\u0105 co prawda \u201cprzeskoczy\u0107\u201d przez kilka poziom\u00f3w VirtualDOM, ale ich liczba szybko ro\u015bnie, a odpowiednia optymalizacja wymaga zr\u0119cznego pos\u0142ugiwania si\u0119 memonizacj\u0105.<\/p>\n","innerContent":["\n<p>Zacznijmy jednak od motywacji tw\u00f3rc\u00f3w Preacta do stworzenia kolejnej biblioteki do zarz\u0105dzania stanem. Jak to zwykle bywa, wszystkie dost\u0119pne na rynku rozwi\u0105zania nie zaspokaja\u0142y potrzeb autor\u00f3w biblioteki. Narz\u0119dzie takie jak Redux czy MobX wprowadzaj\u0105 sporo boilerplate\u2019u, a ich wydajno\u015b\u0107 jest dyskusyjna. Proste podej\u015bcie z useState sprawdza si\u0119 w pocz\u0105tkowych etapach \u017cycia aplikacji, ale wraz z jej rozrostem zaczyna cierpie\u0107 na problemy z props-drilling i niewydajnym renderowaniem. Konteksty, kt\u00f3re staj\u0105 si\u0119 w takim momencie naturaln\u0105 alternatyw\u0105, r\u00f3wnie\u017c nie s\u0105 idealne. Pozwalaj\u0105 co prawda \u201cprzeskoczy\u0107\u201d przez kilka poziom\u00f3w VirtualDOM, ale ich liczba szybko ro\u015bnie, a odpowiednia optymalizacja wymaga zr\u0119cznego pos\u0142ugiwania si\u0119 memonizacj\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9876,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image5.jpg\" alt=\"\" class=\"wp-image-9876\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image5.jpg\" alt=\"\" class=\"wp-image-9876\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Signal w swojej koncepcji jest pewnym pude\u0142kiem na warto\u015b\u0107. Kiedy warto\u015b\u0107 w pude\u0142ku zmienia si\u0119, automatycznie aktualizowane s\u0105 warto\u015bci we wszystkich pude\u0142kach zale\u017cnych. Proces powtarza si\u0119, a\u017c wszystkie pude\u0142ka zostan\u0105 zaktualizowane. Na pierwszy rzut oka bardzo przypomina to po\u0142\u0105czenie useState i useEffect, ale zwr\u00f3\u0107cie uwag\u0119, \u017ce sygna\u0142 definiowany jest globalnie. Umo\u017cliwia to w momencie zmiany warto\u015bci w pude\u0142ku, od\u015bwie\u017cenie tylko tych komponent\u00f3w w VirtualDOM, kt\u00f3re od niego zale\u017c\u0105. <\/p>\n","innerContent":["\n<p>Signal w swojej koncepcji jest pewnym pude\u0142kiem na warto\u015b\u0107. Kiedy warto\u015b\u0107 w pude\u0142ku zmienia si\u0119, automatycznie aktualizowane s\u0105 warto\u015bci we wszystkich pude\u0142kach zale\u017cnych. Proces powtarza si\u0119, a\u017c wszystkie pude\u0142ka zostan\u0105 zaktualizowane. Na pierwszy rzut oka bardzo przypomina to po\u0142\u0105czenie useState i useEffect, ale zwr\u00f3\u0107cie uwag\u0119, \u017ce sygna\u0142 definiowany jest globalnie. Umo\u017cliwia to w momencie zmiany warto\u015bci w pude\u0142ku, od\u015bwie\u017cenie tylko tych komponent\u00f3w w VirtualDOM, kt\u00f3re od niego zale\u017c\u0105. <\/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 { signal, computed } from \"@preact\/signals\";\n\nconst count = signal(0);\nconst double = computed(() => count.value * 2);\neffect(() => console.log(double.value)));\n\nfunction Counter() {\n  return (\n    &lt;button onClick={() => count.value++}>\n      {count} x 2 = {double}\n    &lt;\/button>\n  );\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { signal, computed } from \"@preact\/signals\";\n\nconst count = signal(0);\nconst double = computed(() => count.value * 2);\neffect(() => console.log(double.value)));\n\nfunction Counter() {\n  return (\n    &lt;button onClick={() => count.value++}>\n      {count} x 2 = {double}\n    &lt;\/button>\n  );\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To oczywi\u015bcie jeszcze nie koniec zalet Signals. Na przestrzeni \u017cycia aplikacji, referencja sygna\u0142u nie zmienia si\u0119, wi\u0119c nie musimy obawia\u0107 si\u0119 niechcianych render\u00f3w. Zar\u00f3wno funkcja `computed` jak i `effect` nie wymaga listy zale\u017cno\u015bci i wykrywa je automatycznie. Co wi\u0119cej, je\u015bli zale\u017cno\u015bci ulegn\u0105 zmianie, ale ko\u0144cowa warto\u015b\u0107 pozostaje taka sama, dalsze zale\u017cno\u015bci nie b\u0119d\u0105 od\u015bwie\u017cane.<\/p>\n","innerContent":["\n<p>To oczywi\u015bcie jeszcze nie koniec zalet Signals. Na przestrzeni \u017cycia aplikacji, referencja sygna\u0142u nie zmienia si\u0119, wi\u0119c nie musimy obawia\u0107 si\u0119 niechcianych render\u00f3w. Zar\u00f3wno funkcja `computed` jak i `effect` nie wymaga listy zale\u017cno\u015bci i wykrywa je automatycznie. Co wi\u0119cej, je\u015bli zale\u017cno\u015bci ulegn\u0105 zmianie, ale ko\u0144cowa warto\u015b\u0107 pozostaje taka sama, dalsze zale\u017cno\u015bci nie b\u0119d\u0105 od\u015bwie\u017cane.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Signals to biblioteka napisana w czystym JavaScript, ale jak widzieli\u015bcie na przyk\u0142adach powy\u017cej, autorzy zadbali o przygotowanie specjalnych integracji zar\u00f3wno z Preact jak i React. Szczeg\u00f3lnie ciekawie prezentuje si\u0119 ta pierwsza. Je\u015bli w JSX wykorzystamy signal, zamiast signal.value, to b\u0119dzie on traktowany jako osobny komponent. To oznacza, \u017ce je\u015bli zmieni si\u0119 jego warto\u015b\u0107, Preact zamiast renderowa\u0107 ca\u0142y komponent rodzic, od\u015bwie\u017cy tylko kr\u00f3tki fragment tekstu.<\/p>\n","innerContent":["\n<p>Signals to biblioteka napisana w czystym JavaScript, ale jak widzieli\u015bcie na przyk\u0142adach powy\u017cej, autorzy zadbali o przygotowanie specjalnych integracji zar\u00f3wno z Preact jak i React. Szczeg\u00f3lnie ciekawie prezentuje si\u0119 ta pierwsza. Je\u015bli w JSX wykorzystamy signal, zamiast signal.value, to b\u0119dzie on traktowany jako osobny komponent. To oznacza, \u017ce je\u015bli zmieni si\u0119 jego warto\u015b\u0107, Preact zamiast renderowa\u0107 ca\u0142y komponent rodzic, od\u015bwie\u017cy tylko kr\u00f3tki fragment tekstu.<\/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\">\/\/ In this example whole Counter component will be re-rendered on count change\nconst count = signal(0);\n\nfunction Counter() {\n return (\n    &lt;>\n       &lt;SomeOtherComponent\/>\n       Value: {count.value}\n    &lt;\/> \n  );\n}\n\n\/\/ In this example only count value will re-render on count change\nconst count = signal(0);\n\nfunction Counter() {\n return (\n    &lt;>\n       &lt;SomeOtherComponent\/>\n       Value: {count}\n    &lt;\/> \n  );\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ In this example whole Counter component will be re-rendered on count change\nconst count = signal(0);\n\nfunction Counter() {\n return (\n    &lt;>\n       &lt;SomeOtherComponent\/>\n       Value: {count.value}\n    &lt;\/> \n  );\n}\n\n\/\/ In this example only count value will re-render on count change\nconst count = signal(0);\n\nfunction Counter() {\n return (\n    &lt;>\n       &lt;SomeOtherComponent\/>\n       Value: {count}\n    &lt;\/> \n  );\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli zastanawiacie si\u0119, jak to mo\u017cliwe, \u017ce ca\u0142a ta magia dzia\u0142a, to wybra\u0142em si\u0119 w podr\u00f3\u017c do kodu \u017ar\u00f3d\u0142owego za Was. Signals to tak naprawd\u0119 prosta implementacja wzorca projektowego obserwator (ach te polskie nazwy <\/p>\n","innerContent":["\n<p>Je\u015bli zastanawiacie si\u0119, jak to mo\u017cliwe, \u017ce ca\u0142a ta magia dzia\u0142a, to wybra\u0142em si\u0119 w podr\u00f3\u017c do kodu \u017ar\u00f3d\u0142owego za Was. Signals to tak naprawd\u0119 prosta implementacja wzorca projektowego obserwator (ach te polskie nazwy <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9878,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image6.jpg\" alt=\"\" class=\"wp-image-9878\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image6.jpg\" alt=\"\" class=\"wp-image-9878\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na zako\u0144czenie ma\u0142y bonus dla wszystkich Angularowc\u00f3w, kt\u00f3rzy dotarli a\u017c do ko\u0144ca tej sekcji. Kiedy tw\u00f3rcy Signals pisali, \u017ce biblioteka mo\u017ce by\u0107 wykorzystywana z dowolnym frameworkiem, to naprawd\u0119 nie \u017cartowali. Na twitterze dokopa\u0142em si\u0119 do bajecznie prostej integracji z flagowym frameworkiem od Google. Dodanie do niej obs\u0142ugi ChangeDetection.OnPush to zaledwie kilka linijek kodu i znajdziecie j\u0105 w pierwszej odpowiedzi w\u0105tku. <\/p>\n","innerContent":["\n<p>Na zako\u0144czenie ma\u0142y bonus dla wszystkich Angularowc\u00f3w, kt\u00f3rzy dotarli a\u017c do ko\u0144ca tej sekcji. Kiedy tw\u00f3rcy Signals pisali, \u017ce biblioteka mo\u017ce by\u0107 wykorzystywana z dowolnym frameworkiem, to naprawd\u0119 nie \u017cartowali. Na twitterze dokopa\u0142em si\u0119 do bajecznie prostej integracji z flagowym frameworkiem od Google. Dodanie do niej obs\u0142ugi ChangeDetection.OnPush to zaledwie kilka linijek kodu i znajdziecie j\u0105 w pierwszej odpowiedzi w\u0105tku. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9880,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image1.jpg\" alt=\"\" class=\"wp-image-9880\"\/><figcaption>\u0179r\u00f3d\u0142o: <a href=\"https:\/\/twitter.com\/ashh640\/status\/1567469254034825216?s=20&amp;t=ayfvUBJOY9u9ie4s7VzTpQ\">https:\/\/twitter.com\/ashh640\/status\/1567469254034825216?s=20&amp;t=ayfvUBJOY9u9ie4s7VzTpQ<\/a><\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image1.jpg\" alt=\"\" class=\"wp-image-9880\"\/><figcaption>\u0179r\u00f3d\u0142o: <a href=\"https:\/\/twitter.com\/ashh640\/status\/1567469254034825216?s=20&amp;t=ayfvUBJOY9u9ie4s7VzTpQ\">https:\/\/twitter.com\/ashh640\/status\/1567469254034825216?s=20&amp;t=ayfvUBJOY9u9ie4s7VzTpQ<\/a><\/figcaption><\/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\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/preactjs.com\/blog\/introducing-signals\/\">https:\/\/preactjs.com\/blog\/introducing-signals\/<\/a><\/li><li><a href=\"https:\/\/twitter.com\/_developit\/status\/1567209440843022341 \">https:\/\/twitter.com\/_developit\/status\/1567209440843022341 <\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/preactjs.com\/blog\/introducing-signals\/\">https:\/\/preactjs.com\/blog\/introducing-signals\/<\/a><\/li><li><a href=\"https:\/\/twitter.com\/_developit\/status\/1567209440843022341 \">https:\/\/twitter.com\/_developit\/status\/1567209440843022341 <\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. React Native 0.70 - Hermes wreszcie domy\u015blny<\/h2>\n","innerContent":["\n<h2>2. React Native 0.70 - Hermes wreszcie domy\u015blny<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>O nowym, szybszym i lepszym silniku renderowania dla React Native s\u0142yszy si\u0119 ju\u017c od dawna. Po raz pierwszy zosta\u0142 on zaprezentowany \u015bwiatu w po\u0142owie 2019 roku i dedykowany by\u0142 dla telefon\u00f3w z Androidem na pok\u0142adzie.<\/p>\n","innerContent":["\n<p>O nowym, szybszym i lepszym silniku renderowania dla React Native s\u0142yszy si\u0119 ju\u017c od dawna. Po raz pierwszy zosta\u0142 on zaprezentowany \u015bwiatu w po\u0142owie 2019 roku i dedykowany by\u0142 dla telefon\u00f3w z Androidem na pok\u0142adzie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p> W Wi\u015ble up\u0142yn\u0119\u0142o sporo wody, zanim zesp\u00f3\u0142 Facebooka przygotowa\u0142 r\u00f3wnie\u017c wersj\u0119 na system iOS. Wywo\u0142a\u0142o to jednak ma\u0142\u0105 furor\u0119, bo by\u0142o pierwszym przypadkiem kiedy na urz\u0105dzeniach z jab\u0142uszkiem dzia\u0142a\u0142 silnik inny ni\u017c JavaScriptCore. Co wi\u0119cej, dzia\u0142o si\u0119 to za przyzwoleniem samego Apple.<\/p>\n","innerContent":["\n<p> W Wi\u015ble up\u0142yn\u0119\u0142o sporo wody, zanim zesp\u00f3\u0142 Facebooka przygotowa\u0142 r\u00f3wnie\u017c wersj\u0119 na system iOS. Wywo\u0142a\u0142o to jednak ma\u0142\u0105 furor\u0119, bo by\u0142o pierwszym przypadkiem kiedy na urz\u0105dzeniach z jab\u0142uszkiem dzia\u0142a\u0142 silnik inny ni\u017c JavaScriptCore. Co wi\u0119cej, dzia\u0142o si\u0119 to za przyzwoleniem samego Apple.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Niespe\u0142na p\u00f3\u0142 roku temu, zesp\u00f3\u0142 React Native og\u0142osi\u0142, \u017ce Hermes jest ju\u017c na tyle stabilny, \u017ce wkr\u00f3tce stanie si\u0119 domy\u015blnym silnikiem JavaScript dla ich frameworku. W tym tygodniu, wraz z premier\u0105 React Native 0.70, wreszcie doczekali\u015bmy tej historycznej chwili.<\/p>\n","innerContent":["\n<p>Niespe\u0142na p\u00f3\u0142 roku temu, zesp\u00f3\u0142 React Native og\u0142osi\u0142, \u017ce Hermes jest ju\u017c na tyle stabilny, \u017ce wkr\u00f3tce stanie si\u0119 domy\u015blnym silnikiem JavaScript dla ich frameworku. W tym tygodniu, wraz z premier\u0105 React Native 0.70, wreszcie doczekali\u015bmy tej historycznej chwili.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pozosta\u0142e nowo\u015bci w React Native 0.70 dotycz\u0105 g\u0142\u00f3wnie nowej eksperymentalnej architektury. Dla przypomnienia sk\u0142adaj\u0105 si\u0119 na ni\u0105 Turbo Modules (wydajna integracja z natywnym kodem), Fabric Renderer (nowy renderer, kt\u00f3ry ma ujednolici\u0107 dzia\u0142anie pomi\u0119dzy platformami) oraz Codegen (automatyczne generowanie niezb\u0119dnych plik\u00f3w C++). Wszystkich zainteresowanych szczeg\u00f3\u0142ami na pewno ucieszy fakt, \u017ce jedn\u0105 z nowo\u015bci jest zupe\u0142nie nowa dokumentacja. <\/p>\n","innerContent":["\n<p>Pozosta\u0142e nowo\u015bci w React Native 0.70 dotycz\u0105 g\u0142\u00f3wnie nowej eksperymentalnej architektury. Dla przypomnienia sk\u0142adaj\u0105 si\u0119 na ni\u0105 Turbo Modules (wydajna integracja z natywnym kodem), Fabric Renderer (nowy renderer, kt\u00f3ry ma ujednolici\u0107 dzia\u0142anie pomi\u0119dzy platformami) oraz Codegen (automatyczne generowanie niezb\u0119dnych plik\u00f3w C++). Wszystkich zainteresowanych szczeg\u00f3\u0142ami na pewno ucieszy fakt, \u017ce jedn\u0105 z nowo\u015bci jest zupe\u0142nie nowa dokumentacja. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W poszukiwaniu daty premiery nowej architektury przeczesa\u0142em zar\u00f3wno dokumentacj\u0119, jak i bloga React Native. C\u00f3\u017c, na razie wszystko wskazuje na to, \u017ce pozostanie ona jeszcze d\u0142ugo w fazie eksperymentalnej.<\/p>\n","innerContent":["\n<p>W poszukiwaniu daty premiery nowej architektury przeczesa\u0142em zar\u00f3wno dokumentacj\u0119, jak i bloga React Native. C\u00f3\u017c, na razie wszystko wskazuje na to, \u017ce pozostanie ona jeszcze d\u0142ugo w fazie eksperymentalnej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9882,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image4.jpg\" alt=\"\" class=\"wp-image-9882\"\/><figcaption>\u0179r\u00f3d\u0142o: https:\/\/devs.lol\/meme\/waiting-for-react-native-1-0-javascript-267<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image4.jpg\" alt=\"\" class=\"wp-image-9882\"\/><figcaption>\u0179r\u00f3d\u0142o: https:\/\/devs.lol\/meme\/waiting-for-react-native-1-0-javascript-267<\/figcaption><\/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\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/reactnative.dev\/blog\/2022\/09\/05\/version-070\">https:\/\/reactnative.dev\/blog\/2022\/09\/05\/version-070<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/reactnative.dev\/blog\/2022\/09\/05\/version-070\">https:\/\/reactnative.dev\/blog\/2022\/09\/05\/version-070<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Uwolni\u0107 JavaScript! - list otwarty tw\u00f3rcy Node.js i Deno<\/h2>\n","innerContent":["\n<h2>3. Uwolni\u0107 JavaScript! - list otwarty tw\u00f3rcy Node.js i Deno<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Historia JavaScript jest szalona i pe\u0142na zawirowa\u0144. Zw\u0142aszcza jej pocz\u0105tki i legenda o stworzeniu ca\u0142ego j\u0119zyka w 10 dni. Na pewno nie raz ju\u017c j\u0105 s\u0142yszeli\u015bcie, ale i tak nie odm\u00f3wi\u0119 sobie jej przytoczenia. <\/p>\n","innerContent":["\n<p>Historia JavaScript jest szalona i pe\u0142na zawirowa\u0144. Zw\u0142aszcza jej pocz\u0105tki i legenda o stworzeniu ca\u0142ego j\u0119zyka w 10 dni. Na pewno nie raz ju\u017c j\u0105 s\u0142yszeli\u015bcie, ale i tak nie odm\u00f3wi\u0119 sobie jej przytoczenia. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jest rok 1995 i Brendan Eich pracuje w\u0142a\u015bnie w Netscape. W wolnym czasie lubi on projektowa\u0107 swoje w\u0142asne, proste j\u0119zyki programowania. Pewnego dnia w pracy dostaje szans\u0119 wykorzysta\u0107  do\u015bwiadczenie zdobyte po godzinach i dostaje zadanie stworzenia j\u0119zyka skryptowego na potrzeby flagowego produktu firmy. Na wykonanie zadania dostaje zatrwa\u017caj\u0105ce 10 dni, ale mimo wszystko zakasa r\u0119kawy i bierze si\u0119 do roboty. W trakcie rozmowy przy kawie z jednym z koleg\u00f3w z biura przyznaje, \u017ce jego j\u0119zyk przetrwa kilka tygodni, albo 20 lat. No c\u00f3\u017c, niewiele si\u0119 pomyli\u0142.<\/p>\n","innerContent":["\n<p>Jest rok 1995 i Brendan Eich pracuje w\u0142a\u015bnie w Netscape. W wolnym czasie lubi on projektowa\u0107 swoje w\u0142asne, proste j\u0119zyki programowania. Pewnego dnia w pracy dostaje szans\u0119 wykorzysta\u0107  do\u015bwiadczenie zdobyte po godzinach i dostaje zadanie stworzenia j\u0119zyka skryptowego na potrzeby flagowego produktu firmy. Na wykonanie zadania dostaje zatrwa\u017caj\u0105ce 10 dni, ale mimo wszystko zakasa r\u0119kawy i bierze si\u0119 do roboty. W trakcie rozmowy przy kawie z jednym z koleg\u00f3w z biura przyznaje, \u017ce jego j\u0119zyk przetrwa kilka tygodni, albo 20 lat. No c\u00f3\u017c, niewiele si\u0119 pomyli\u0142.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Powi\u0105zania mi\u0119dzy Jav\u0105, a JavaScriptem r\u00f3wnie\u017c nie s\u0105 przypadkowe. Lata dziewi\u0119\u0107dziesi\u0105te to okres, kiedy programowanie w Javie by\u0142o cool, a programi\u015bci C++ z ut\u0119sknieniem patrzyli na projekty pisane w\u0142a\u015bnie w obiektowej Javie. Pod mod\u0119 na Jav\u0119 chcia\u0142 si\u0119 podpi\u0105\u0107 r\u00f3wnie\u017c Netscape ze swoim nowo powsta\u0142ym j\u0119zykiem. Mia\u0142 on nie tylko przypomina\u0107 Jav\u0119, ale r\u00f3wnie\u017c jego nazwa powinna kojarzy\u0107 si\u0119 od razu z najbardziej po\u017c\u0105danym j\u0119zykiem na rynku. W ten spos\u00f3b narodzi\u0142 si\u0119 JavaScript. <\/p>\n","innerContent":["\n<p>Powi\u0105zania mi\u0119dzy Jav\u0105, a JavaScriptem r\u00f3wnie\u017c nie s\u0105 przypadkowe. Lata dziewi\u0119\u0107dziesi\u0105te to okres, kiedy programowanie w Javie by\u0142o cool, a programi\u015bci C++ z ut\u0119sknieniem patrzyli na projekty pisane w\u0142a\u015bnie w obiektowej Javie. Pod mod\u0119 na Jav\u0119 chcia\u0142 si\u0119 podpi\u0105\u0107 r\u00f3wnie\u017c Netscape ze swoim nowo powsta\u0142ym j\u0119zykiem. Mia\u0142 on nie tylko przypomina\u0107 Jav\u0119, ale r\u00f3wnie\u017c jego nazwa powinna kojarzy\u0107 si\u0119 od razu z najbardziej po\u017c\u0105danym j\u0119zykiem na rynku. W ten spos\u00f3b narodzi\u0142 si\u0119 JavaScript. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9884,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image7.jpg\" alt=\"\" class=\"wp-image-9884\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image7.jpg\" alt=\"\" class=\"wp-image-9884\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak wiemy, historia sukcesu Netscape nie trwa\u0142a d\u0142ugo. W 1999 roku firma Netscape po\u0142\u0105czona zosta\u0142a z firm\u0105 America Online (AOL). Po zako\u0144czeniu procesu po\u0142\u0105czenia, firma wesz\u0142a r\u00f3wnie\u017c w \u015bcis\u0142\u0105 wsp\u00f3\u0142prac\u0119 z Sun Microsystems. W 2002 roku wsp\u00f3\u0142praca zosta\u0142a zako\u0144czona, a w wyniku zawirowa\u0144 znak towarowy JavaScript pozosta\u0142 w r\u0119kach Sun Microsystem. W 2009 roku firma ta zosta\u0142a skolei kupiona wraz ze znakiem towarowym przez Oracle.<\/p>\n","innerContent":["\n<p>Jak wiemy, historia sukcesu Netscape nie trwa\u0142a d\u0142ugo. W 1999 roku firma Netscape po\u0142\u0105czona zosta\u0142a z firm\u0105 America Online (AOL). Po zako\u0144czeniu procesu po\u0142\u0105czenia, firma wesz\u0142a r\u00f3wnie\u017c w \u015bcis\u0142\u0105 wsp\u00f3\u0142prac\u0119 z Sun Microsystems. W 2002 roku wsp\u00f3\u0142praca zosta\u0142a zako\u0144czona, a w wyniku zawirowa\u0144 znak towarowy JavaScript pozosta\u0142 w r\u0119kach Sun Microsystem. W 2009 roku firma ta zosta\u0142a skolei kupiona wraz ze znakiem towarowym przez Oracle.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9886,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image2.jpg\" alt=\"\" class=\"wp-image-9886\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image2.jpg\" alt=\"\" class=\"wp-image-9886\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na dzie\u0144 dzisiejszy Oracle nie wykorzystuje nigdzie znaku towarowego JavaScript. Firma nie uczestniczy r\u00f3wnie\u017c aktywnie w jego rozwoju w ramach ECMAScript. To w\u0142a\u015bnie do tego faktu odnosi si\u0119 w g\u0142\u00f3wnej mierze argumentacja Ryan Dahla, w jego otwartym li\u015bcie do Oracle. Prosi on w nim o zmian\u0119 licencji znaku towarowego JavaScript i przekazanie go w r\u0119ce spo\u0142eczno\u015bci. Gdyby tak si\u0119 wydarzy\u0142o ECMAScript m\u00f3g\u0142by wreszcie sta\u0107 si\u0119 po prostu JavaScriptem lub JavaScript Standard Committee. Ci\u0119\u017cko nie zgodzi\u0107 si\u0119, \u017ce znacz\u0105co upro\u015bci\u0142oby to ca\u0142\u0105 sytuacj\u0119 nazewnicz\u0105. Je\u015bli jeste\u015bcie zainteresowani, to oryginaln\u0105 tre\u015b\u0107 listu znajdziecie w \u017ar\u00f3d\u0142ach poni\u017cej.<\/p>\n","innerContent":["\n<p>Na dzie\u0144 dzisiejszy Oracle nie wykorzystuje nigdzie znaku towarowego JavaScript. Firma nie uczestniczy r\u00f3wnie\u017c aktywnie w jego rozwoju w ramach ECMAScript. To w\u0142a\u015bnie do tego faktu odnosi si\u0119 w g\u0142\u00f3wnej mierze argumentacja Ryan Dahla, w jego otwartym li\u015bcie do Oracle. Prosi on w nim o zmian\u0119 licencji znaku towarowego JavaScript i przekazanie go w r\u0119ce spo\u0142eczno\u015bci. Gdyby tak si\u0119 wydarzy\u0142o ECMAScript m\u00f3g\u0142by wreszcie sta\u0107 si\u0119 po prostu JavaScriptem lub JavaScript Standard Committee. Ci\u0119\u017cko nie zgodzi\u0107 si\u0119, \u017ce znacz\u0105co upro\u015bci\u0142oby to ca\u0142\u0105 sytuacj\u0119 nazewnicz\u0105. Je\u015bli jeste\u015bcie zainteresowani, to oryginaln\u0105 tre\u015b\u0107 listu znajdziecie w \u017ar\u00f3d\u0142ach poni\u017cej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9888,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image9.jpg\" alt=\"\" class=\"wp-image-9888\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image9.jpg\" alt=\"\" class=\"wp-image-9888\"\/><\/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\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/tinyclouds.org\/trademark\">https:\/\/tinyclouds.org\/trademark<\/a><\/li><li><a href=\"https:\/\/devclass.com\/2022\/09\/05\/node-js-creator-ryan-dahl-urges-oracle-to-release-javascript-trademark\/ \">https:\/\/devclass.com\/2022\/09\/05\/node-js-creator-ryan-dahl-urges-oracle-to-release-javascript-trademark\/ <\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=3-9fnjzmXWA\">https:\/\/www.youtube.com\/watch?v=3-9fnjzmXWA<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/tinyclouds.org\/trademark\">https:\/\/tinyclouds.org\/trademark<\/a><\/li><li><a href=\"https:\/\/devclass.com\/2022\/09\/05\/node-js-creator-ryan-dahl-urges-oracle-to-release-javascript-trademark\/ \">https:\/\/devclass.com\/2022\/09\/05\/node-js-creator-ryan-dahl-urges-oracle-to-release-javascript-trademark\/ <\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=3-9fnjzmXWA\">https:\/\/www.youtube.com\/watch?v=3-9fnjzmXWA<\/a><\/li><\/ul>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9898","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=9898"}],"version-history":[{"count":4,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9898\/revisions"}],"predecessor-version":[{"id":9902,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9898\/revisions\/9902"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/9871"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}