{"id":13376,"date":"2022-12-23T17:04:08","date_gmt":"2022-12-23T16:04:08","guid":{"rendered":"https:\/\/vived.io\/?p=13376"},"modified":"2022-12-23T17:04:12","modified_gmt":"2022-12-23T16:04:12","slug":"useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/","title":{"rendered":"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118"},"content":{"rendered":"\n<h2 id=\"1-umarl-useevent-niech-zyje-useeffectevent\" data-num=1>1. Umar\u0142 useEvent, niech \u017cyje useEffectEvent!<\/h2>\n\n\n\n<p>Ponad p\u00f3\u0142 roku temu zesp\u00f3\u0142 Reacta podzieli\u0142 si\u0119 ze \u015bwiatem RFC (Request For Comments) dotycz\u0105cym nowego hooka <code>useEvent<\/code>. Mia\u0142 on zwraca\u0107 funkcj\u0119 o sta\u0142ej referencji, we wn\u0119trzu kt\u00f3rej stan zawsze odpowiada aktualnemu stanowi komponentu. Dzi\u0119ki takiemu zachowaniu mo\u017cliwe mia\u0142o by\u0107 bardzo agresywne optymalizowanie zb\u0119dnych render\u00f3w.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState(&#039;&#039;);\n\n  \/\/ \ud83d\udfe1 A different function whenever `text` changes\n  const onClick = useCallback(() =&gt; {\n    sendMessage(text);\n  }, [text]);\n\n  return &lt;SendButton onClick={onClick} \/&gt;;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState(&#039;&#039;);\n\n  \/\/ \u2705 Always the same function (even if `text` changes)\n  const onClick = useEvent(() =&gt; {\n    sendMessage(text);\n  });\n\n  return &lt;SendButton onClick={onClick} \/&gt;;\n}<\/code><\/pre>\n\n\n\n<p>Niestety RFC spe\u0142ni\u0142o swoj\u0105 powinno\u015b\u0107 i wywo\u0142a\u0142o sporo za\u017cartych dyskusji. W ich wyniku w g\u0142owach tw\u00f3rc\u00f3w nowego hooka narodzi\u0142y si\u0119 w\u0105tpliwo\u015bci i zdecydowali si\u0119 oni wstrzyma\u0107 prace nad jego implementacj\u0105. Na prz\u00f3d wysun\u0119\u0142y si\u0119 dwa argumenty. Po pierwsze, u\u017cytkownicy mogli zinterpretowa\u0107 nowy hook jako lepsz\u0105 wersj\u0119 <code>useCallback<\/code>, a w rzeczywisto\u015bci oba hooki mia\u0142y pe\u0142ni\u0107 troch\u0119 inne funkcje. Po drugie, r\u00f3wnolegle do <code>useEvent<\/code> rozwijany by\u0142 kompilator, kt\u00f3ry umo\u017cliwia automatyczn\u0105 memonizacj\u0119 (wi\u0119cej o nim mo\u017cecie dowiedzie\u015b si\u0119 <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\" target=\"_blank\" rel=\"noreferrer noopener\">tutaj<\/a>). Praca nad oboma funkcjonalno\u015bciami r\u00f3wnocze\u015bnie by\u0142aby po prostu zbyt uci\u0105\u017cliwa.<\/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\/2022\/12\/download-68.jpeg\" alt=\"\" class=\"wp-image-13390\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-68.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-68-225x300.jpeg 225w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Wszystkie znaki na niebie i ziemi wskazuj\u0105, \u017ce <code>useEvent<\/code> za nied\u0142ugo wr\u00f3ci do Nas w odmienionej postaci. W repozytorium Reacta pojawi\u0142 si\u0119 Pull Request, kt\u00f3ry zmienia jego nazw\u0119 na <code>useEffectEvent<\/code> oraz lekko zmienia jego zachowanie. Od teraz funkcja nie b\u0119dzie zwraca\u0107 sta\u0142ej referencji, ale wci\u0105\u017c b\u0119dzie mo\u017cna odwo\u0142ywa\u0107 si\u0119 do niej z poziomu <code>useEffect<\/code> nie podaj\u0105c jej w li\u015bcie zale\u017cno\u015bci.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState(&#039;&#039;);\n  const [state, setState] = useState&lt;State&gt;(&#039;INITIAL&#039;);\n\n  const onHappened = useEffectEvent(() =&gt; {\n    logValueToAnalytics(text);\n  });\n  \n  useEffect(() =&gt; {\n    onHappened();\n  }, [state]);\n\n  return (\/*...*\/);\n}<\/code><\/pre>\n\n\n\n<p>Na razie tajemniczemu Pull Requesta nie towarzyszy pe\u0142ne RFC, dlatego ci\u0119\u017cko przewidywa\u0107 przysz\u0142o\u015b\u0107 `useEffectEvent` czy wysnuwa\u0107 szersze wnioski na temat jego funkcjonalno\u015bci. Na pewno kiedy RFC wreszcie si\u0119 pojawi dostaniemy szerszy kontekst na ca\u0142\u0105 spraw\u0119 i na pewno przeczytacie o tym w naszym weekly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/facebook\/react\/pull\/25881\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/facebook\/react\/pull\/25881<\/a><br><a href=\"https:\/\/github.com\/reactjs\/rfcs\/blob\/useevent\/text\/0000-useevent.md#basic-example\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/reactjs\/rfcs\/blob\/useevent\/text\/0000-useevent.md<\/a><\/p>\n\n\n\n<h2 id=\"2-storybook-7-0-zbliza-sie-wielkimi-krokami\" data-num=2>2. Storybook 7.0 zbli\u017ca si\u0119 wielkimi krokami<\/h2>\n\n\n\n<p>Storybook 7.0 b\u0119dzie pierwszym du\u017cym wydaniem tego narz\u0119dzia od ponad dw\u00f3ch lat. Zdecydowanie by\u0142o na co czeka\u0107, bo opublikowana w\u0142a\u015bnie wersja beta wprowadza ca\u0142\u0105 mas\u0119 od dawna wyczekiwanych usprawnie\u0144 i nowo\u015bci. W szczeg\u00f3\u0142ach przyjrzymy si\u0119 nowemu Storybookowi przy okazji wydania pe\u0142nej wersji pocz\u0105tkiem roku. Wszystkich niecierplowych ju\u017c teraz zapraszam jednak do obszernej notatki od tw\u00f3rc\u00f3w narz\u0119dzia do kt\u00f3rej link znajdziecie w \u017ar\u00f3d\u0142ach.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-69.jpeg\" alt=\"\" class=\"wp-image-13392\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-69.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-69-300x300.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-69-150x150.jpeg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Skr\u00f3cona lista nowo\u015bci w Storybook 7.0 beta:<br>\ud83d\udc85Od\u015bwie\u017cony design<br>\ud83c\udfce\ufe0f Poprawiona wydajno\u015b\u0107<br>\ud83d\udea5Unit Testy komponent\u00f3w z wykorzystaniem Playwright<br>\ud83d\udd79\ufe0fTesty interakcji przy pomocy Testing Library<br>\ud83e\udde9 Framework API, czyli brakuj\u0105cy kawa\u0142ek umo\u017cliwiaj\u0105cy integracj\u0119 z nowymi bibliotekami i frameworkami. Na start dostajemy Next.js i SvelteKit, ale Remix i Nuxt ju\u017c czekaj\u0105 w kolejce.<br>\u26a1 Pe\u0142noprawne wsparcie dla Vite<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<p><a href=\"https:\/\/storybook.js.org\/blog\/7-0-beta\/\">https:\/\/storybook.js.org\/blog\/7-0-beta\/<\/a><\/p>\n\n\n\n<h2 id=\"3-podsumowanie-roku-od-node-weekly-i-react-weekly\" data-num=3>3. Podsumowanie roku od Node Weekly i React Weekly<\/h2>\n\n\n\n<p>Wielkimi krokami zbli\u017camy si\u0119 do ko\u0144ca roku, a to oznacza, \u017ce okres wszelakich podsumowa\u0144 jest ju\u017c w pe\u0142ni. W minionym tygodniu Peter Cooper, czyli autor bardzo popularnych newsleter\u00f3w dotycz\u0105cych JavaScriptu (mi\u0119dzy innymi React Status, Node Weekly, JavaScript Weekly), zdecydowa\u0142 si\u0119 po\u015bwi\u0119ci\u0107 kilka ze swoich publikacji podsumowaniu najlepszych artyku\u0142\u00f3w z minionego roku. Je\u015bli w trakcie przerwy \u015bwi\u0105tecznej b\u0119dziecie szuka\u0107 czego\u015b do lektury, to na pewno znajdziecie tu co\u015b dla siebie.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nodeweekly.com\/issues\/467\" target=\"_blank\" rel=\"noreferrer noopener\">The Best of Node Weekly in 2022<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/react.statuscode.com\/issues\/319\" target=\"_blank\" rel=\"noreferrer noopener\">The Best of React Status in 2022<\/a><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"250\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/giphy-30.gif\" alt=\"\" class=\"wp-image-13397\"\/><figcaption class=\"wp-element-caption\">A je\u015bli szukacie czego\u015b do ogl\u0105dania przez \u015bwi\u0119ta, to ja ostatnio wr\u00f3ci\u0142em do &#8222;Dr House&#8221; i naprawd\u0119 zestarza\u0142 sie z gracj\u0105<\/figcaption><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Z racji tego, \u017ce jest to ju\u017c ostatnia edycja naszego przegl\u0105du w tym roku, \u017cycz\u0119 Wszystkim pysznego barszczyku i szampa\u0144skiego sylwestra. Do zobaczenia za rok! <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"400\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/giphy-29-1.gif\" alt=\"\" class=\"wp-image-13381\"\/><\/figure><\/div>","protected":false},"excerpt":{"rendered":"<p>Tw\u00f3rcy Reacta porzucili prace nad hookiem useEvent ju\u017c kilka miesi\u0119cy temu. Wszystko wskazuje jednak na to, \u017ce nied\u0142ugo wr\u00f3ci on do \u017cycia w odrobin\u0119 odmienionej formie. <\/p>\n","protected":false},"author":12,"featured_media":13383,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273,1],"tags":[389,393],"class_list":["post-13376","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl","category-no-category","tag-react-pl","tag-storybook-pl"],"acf":{"feature_image_visible":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png","feature_image_blog":{"ID":13385,"id":13385,"title":"pexels-cottonbro-studio-6072439","filename":"pexels-cottonbro-studio-6072439.jpg","filesize":198482,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439.jpg","link":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/pexels-cottonbro-studio-6072439\/","alt":"","author":"12","description":"","caption":"","name":"pexels-cottonbro-studio-6072439","status":"inherit","uploaded_to":13376,"date":"2022-12-23 15:53:25","modified":"2022-12-23 15:53:25","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1280,"height":853,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439-150x150.jpg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439-300x200.jpg","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439-768x512.jpg","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439-1024x682.jpg","large-width":1024,"large-height":682,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439.jpg","1536x1536-width":1280,"1536x1536-height":853,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439.jpg","2048x2048-width":1280,"2048x2048-height":853,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439.jpg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439.jpg","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/pexels-cottonbro-studio-6072439.jpg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"estimated_reading_time":"3"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118 - 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\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118 - Vived\" \/>\n<meta property=\"og:description\" content=\"Tw\u00f3rcy Reacta porzucili prace nad hookiem useEvent ju\u017c kilka miesi\u0119cy temu. Wszystko wskazuje jednak na to, \u017ce nied\u0142ugo wr\u00f3ci on do \u017cycia w odrobin\u0119 odmienionej formie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-23T16:04:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-23T16:04:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.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\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118\",\"datePublished\":\"2022-12-23T16:04:08+00:00\",\"dateModified\":\"2022-12-23T16:04:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/\"},\"wordCount\":623,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png\",\"keywords\":[\"react\",\"Storybook\"],\"articleSection\":[\"Frontend\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/\",\"url\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/\",\"name\":\"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png\",\"datePublished\":\"2022-12-23T16:04:08+00:00\",\"dateModified\":\"2022-12-23T16:04:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118\"}]},{\"@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":"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118 - 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\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/","og_locale":"pl_PL","og_type":"article","og_title":"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118 - Vived","og_description":"Tw\u00f3rcy Reacta porzucili prace nad hookiem useEvent ju\u017c kilka miesi\u0119cy temu. Wszystko wskazuje jednak na to, \u017ce nied\u0142ugo wr\u00f3ci on do \u017cycia w odrobin\u0119 odmienionej formie.","og_url":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/","og_site_name":"Vived","article_published_time":"2022-12-23T16:04:08+00:00","article_modified_time":"2022-12-23T16:04:12+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.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\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118","datePublished":"2022-12-23T16:04:08+00:00","dateModified":"2022-12-23T16:04:12+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/"},"wordCount":623,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png","keywords":["react","Storybook"],"articleSection":["Frontend","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/","url":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/","name":"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png","datePublished":"2022-12-23T16:04:08+00:00","dateModified":"2022-12-23T16:04:12+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/Frontend-Weekly-1200x628_V2-3.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/useeffectevent-zmierza-do-reacta-frontend-weekly-vol-118\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"useEffectEvent zmierza do Reacta | Frontend Weekly vol. 118"}]},{"@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. Umar\u0142 useEvent, niech \u017cyje useEffectEvent!<\/h2>\n","innerContent":["\n<h2>1. Umar\u0142 useEvent, niech \u017cyje useEffectEvent!<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ponad p\u00f3\u0142 roku temu zesp\u00f3\u0142 Reacta podzieli\u0142 si\u0119 ze \u015bwiatem RFC (Request For Comments) dotycz\u0105cym nowego hooka <code>useEvent<\/code>. Mia\u0142 on zwraca\u0107 funkcj\u0119 o sta\u0142ej referencji, we wn\u0119trzu kt\u00f3rej stan zawsze odpowiada aktualnemu stanowi komponentu. Dzi\u0119ki takiemu zachowaniu mo\u017cliwe mia\u0142o by\u0107 bardzo agresywne optymalizowanie zb\u0119dnych render\u00f3w.<\/p>\n","innerContent":["\n<p>Ponad p\u00f3\u0142 roku temu zesp\u00f3\u0142 Reacta podzieli\u0142 si\u0119 ze \u015bwiatem RFC (Request For Comments) dotycz\u0105cym nowego hooka <code>useEvent<\/code>. Mia\u0142 on zwraca\u0107 funkcj\u0119 o sta\u0142ej referencji, we wn\u0119trzu kt\u00f3rej stan zawsze odpowiada aktualnemu stanowi komponentu. Dzi\u0119ki takiemu zachowaniu mo\u017cliwe mia\u0142o by\u0107 bardzo agresywne optymalizowanie zb\u0119dnych render\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState('');\n\n  \/\/ \ud83d\udfe1 A different function whenever `text` changes\n  const onClick = useCallback(() => {\n    sendMessage(text);\n  }, [text]);\n\n  return &lt;SendButton onClick={onClick} \/>;\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState('');\n\n  \/\/ \ud83d\udfe1 A different function whenever `text` changes\n  const onClick = useCallback(() => {\n    sendMessage(text);\n  }, [text]);\n\n  return &lt;SendButton onClick={onClick} \/>;\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState('');\n\n  \/\/ \u2705 Always the same function (even if `text` changes)\n  const onClick = useEvent(() => {\n    sendMessage(text);\n  });\n\n  return &lt;SendButton onClick={onClick} \/>;\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState('');\n\n  \/\/ \u2705 Always the same function (even if `text` changes)\n  const onClick = useEvent(() => {\n    sendMessage(text);\n  });\n\n  return &lt;SendButton onClick={onClick} \/>;\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Niestety RFC spe\u0142ni\u0142o swoj\u0105 powinno\u015b\u0107 i wywo\u0142a\u0142o sporo za\u017cartych dyskusji. W ich wyniku w g\u0142owach tw\u00f3rc\u00f3w nowego hooka narodzi\u0142y si\u0119 w\u0105tpliwo\u015bci i zdecydowali si\u0119 oni wstrzyma\u0107 prace nad jego implementacj\u0105. Na prz\u00f3d wysun\u0119\u0142y si\u0119 dwa argumenty. Po pierwsze, u\u017cytkownicy mogli zinterpretowa\u0107 nowy hook jako lepsz\u0105 wersj\u0119 <code>useCallback<\/code>, a w rzeczywisto\u015bci oba hooki mia\u0142y pe\u0142ni\u0107 troch\u0119 inne funkcje. Po drugie, r\u00f3wnolegle do <code>useEvent<\/code> rozwijany by\u0142 kompilator, kt\u00f3ry umo\u017cliwia automatyczn\u0105 memonizacj\u0119 (wi\u0119cej o nim mo\u017cecie dowiedzie\u015b si\u0119 <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\" target=\"_blank\" rel=\"noreferrer noopener\">tutaj<\/a>). Praca nad oboma funkcjonalno\u015bciami r\u00f3wnocze\u015bnie by\u0142aby po prostu zbyt uci\u0105\u017cliwa.<\/p>\n","innerContent":["\n<p>Niestety RFC spe\u0142ni\u0142o swoj\u0105 powinno\u015b\u0107 i wywo\u0142a\u0142o sporo za\u017cartych dyskusji. W ich wyniku w g\u0142owach tw\u00f3rc\u00f3w nowego hooka narodzi\u0142y si\u0119 w\u0105tpliwo\u015bci i zdecydowali si\u0119 oni wstrzyma\u0107 prace nad jego implementacj\u0105. Na prz\u00f3d wysun\u0119\u0142y si\u0119 dwa argumenty. Po pierwsze, u\u017cytkownicy mogli zinterpretowa\u0107 nowy hook jako lepsz\u0105 wersj\u0119 <code>useCallback<\/code>, a w rzeczywisto\u015bci oba hooki mia\u0142y pe\u0142ni\u0107 troch\u0119 inne funkcje. Po drugie, r\u00f3wnolegle do <code>useEvent<\/code> rozwijany by\u0142 kompilator, kt\u00f3ry umo\u017cliwia automatyczn\u0105 memonizacj\u0119 (wi\u0119cej o nim mo\u017cecie dowiedzie\u015b si\u0119 <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\" target=\"_blank\" rel=\"noreferrer noopener\">tutaj<\/a>). Praca nad oboma funkcjonalno\u015bciami r\u00f3wnocze\u015bnie by\u0142aby po prostu zbyt uci\u0105\u017cliwa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":13390,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-68.jpeg\" alt=\"\" class=\"wp-image-13390\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-68.jpeg\" alt=\"\" class=\"wp-image-13390\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wszystkie znaki na niebie i ziemi wskazuj\u0105, \u017ce <code>useEvent<\/code> za nied\u0142ugo wr\u00f3ci do Nas w odmienionej postaci. W repozytorium Reacta pojawi\u0142 si\u0119 Pull Request, kt\u00f3ry zmienia jego nazw\u0119 na <code>useEffectEvent<\/code> oraz lekko zmienia jego zachowanie. Od teraz funkcja nie b\u0119dzie zwraca\u0107 sta\u0142ej referencji, ale wci\u0105\u017c b\u0119dzie mo\u017cna odwo\u0142ywa\u0107 si\u0119 do niej z poziomu <code>useEffect<\/code> nie podaj\u0105c jej w li\u015bcie zale\u017cno\u015bci.<\/p>\n","innerContent":["\n<p>Wszystkie znaki na niebie i ziemi wskazuj\u0105, \u017ce <code>useEvent<\/code> za nied\u0142ugo wr\u00f3ci do Nas w odmienionej postaci. W repozytorium Reacta pojawi\u0142 si\u0119 Pull Request, kt\u00f3ry zmienia jego nazw\u0119 na <code>useEffectEvent<\/code> oraz lekko zmienia jego zachowanie. Od teraz funkcja nie b\u0119dzie zwraca\u0107 sta\u0142ej referencji, ale wci\u0105\u017c b\u0119dzie mo\u017cna odwo\u0142ywa\u0107 si\u0119 do niej z poziomu <code>useEffect<\/code> nie podaj\u0105c jej w li\u015bcie zale\u017cno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState('');\n  const [state, setState] = useState&lt;State>('INITIAL');\n\n  const onHappened = useEffectEvent(() => {\n    logValueToAnalytics(text);\n  });\n  \n  useEffect(() => {\n    onHappened();\n  }, [state]);\n\n  return (\/*...*\/);\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">function Chat() {\n  const [text, setText] = useState('');\n  const [state, setState] = useState&lt;State>('INITIAL');\n\n  const onHappened = useEffectEvent(() => {\n    logValueToAnalytics(text);\n  });\n  \n  useEffect(() => {\n    onHappened();\n  }, [state]);\n\n  return (\/*...*\/);\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na razie tajemniczemu Pull Requesta nie towarzyszy pe\u0142ne RFC, dlatego ci\u0119\u017cko przewidywa\u0107 przysz\u0142o\u015b\u0107 `useEffectEvent` czy wysnuwa\u0107 szersze wnioski na temat jego funkcjonalno\u015bci. Na pewno kiedy RFC wreszcie si\u0119 pojawi dostaniemy szerszy kontekst na ca\u0142\u0105 spraw\u0119 i na pewno przeczytacie o tym w naszym weekly.<\/p>\n","innerContent":["\n<p>Na razie tajemniczemu Pull Requesta nie towarzyszy pe\u0142ne RFC, dlatego ci\u0119\u017cko przewidywa\u0107 przysz\u0142o\u015b\u0107 `useEffectEvent` czy wysnuwa\u0107 szersze wnioski na temat jego funkcjonalno\u015bci. Na pewno kiedy RFC wreszcie si\u0119 pojawi dostaniemy szerszy kontekst na ca\u0142\u0105 spraw\u0119 i na pewno przeczytacie o tym w naszym weekly.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/facebook\/react\/pull\/25881\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/facebook\/react\/pull\/25881<\/a><br><a href=\"https:\/\/github.com\/reactjs\/rfcs\/blob\/useevent\/text\/0000-useevent.md#basic-example\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/reactjs\/rfcs\/blob\/useevent\/text\/0000-useevent.md<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/facebook\/react\/pull\/25881\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/facebook\/react\/pull\/25881<\/a><br><a href=\"https:\/\/github.com\/reactjs\/rfcs\/blob\/useevent\/text\/0000-useevent.md#basic-example\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/reactjs\/rfcs\/blob\/useevent\/text\/0000-useevent.md<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Storybook 7.0 zbli\u017ca si\u0119 wielkimi krokami<\/h2>\n","innerContent":["\n<h2>2. Storybook 7.0 zbli\u017ca si\u0119 wielkimi krokami<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Storybook 7.0 b\u0119dzie pierwszym du\u017cym wydaniem tego narz\u0119dzia od ponad dw\u00f3ch lat. Zdecydowanie by\u0142o na co czeka\u0107, bo opublikowana w\u0142a\u015bnie wersja beta wprowadza ca\u0142\u0105 mas\u0119 od dawna wyczekiwanych usprawnie\u0144 i nowo\u015bci. W szczeg\u00f3\u0142ach przyjrzymy si\u0119 nowemu Storybookowi przy okazji wydania pe\u0142nej wersji pocz\u0105tkiem roku. Wszystkich niecierplowych ju\u017c teraz zapraszam jednak do obszernej notatki od tw\u00f3rc\u00f3w narz\u0119dzia do kt\u00f3rej link znajdziecie w \u017ar\u00f3d\u0142ach.<\/p>\n","innerContent":["\n<p>Storybook 7.0 b\u0119dzie pierwszym du\u017cym wydaniem tego narz\u0119dzia od ponad dw\u00f3ch lat. Zdecydowanie by\u0142o na co czeka\u0107, bo opublikowana w\u0142a\u015bnie wersja beta wprowadza ca\u0142\u0105 mas\u0119 od dawna wyczekiwanych usprawnie\u0144 i nowo\u015bci. W szczeg\u00f3\u0142ach przyjrzymy si\u0119 nowemu Storybookowi przy okazji wydania pe\u0142nej wersji pocz\u0105tkiem roku. Wszystkich niecierplowych ju\u017c teraz zapraszam jednak do obszernej notatki od tw\u00f3rc\u00f3w narz\u0119dzia do kt\u00f3rej link znajdziecie w \u017ar\u00f3d\u0142ach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":13392,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-69.jpeg\" alt=\"\" class=\"wp-image-13392\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/download-69.jpeg\" alt=\"\" class=\"wp-image-13392\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Skr\u00f3cona lista nowo\u015bci w Storybook 7.0 beta:<br>\ud83d\udc85Od\u015bwie\u017cony design<br>\ud83c\udfce\ufe0f Poprawiona wydajno\u015b\u0107<br>\ud83d\udea5Unit Testy komponent\u00f3w z wykorzystaniem Playwright<br>\ud83d\udd79\ufe0fTesty interakcji przy pomocy Testing Library<br>\ud83e\udde9 Framework API, czyli brakuj\u0105cy kawa\u0142ek umo\u017cliwiaj\u0105cy integracj\u0119 z nowymi bibliotekami i frameworkami. Na start dostajemy Next.js i SvelteKit, ale Remix i Nuxt ju\u017c czekaj\u0105 w kolejce.<br>\u26a1 Pe\u0142noprawne wsparcie dla Vite<\/p>\n","innerContent":["\n<p>Skr\u00f3cona lista nowo\u015bci w Storybook 7.0 beta:<br>\ud83d\udc85Od\u015bwie\u017cony design<br>\ud83c\udfce\ufe0f Poprawiona wydajno\u015b\u0107<br>\ud83d\udea5Unit Testy komponent\u00f3w z wykorzystaniem Playwright<br>\ud83d\udd79\ufe0fTesty interakcji przy pomocy Testing Library<br>\ud83e\udde9 Framework API, czyli brakuj\u0105cy kawa\u0142ek umo\u017cliwiaj\u0105cy integracj\u0119 z nowymi bibliotekami i frameworkami. Na start dostajemy Next.js i SvelteKit, ale Remix i Nuxt ju\u017c czekaj\u0105 w kolejce.<br>\u26a1 Pe\u0142noprawne wsparcie dla Vite<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/storybook.js.org\/blog\/7-0-beta\/\">https:\/\/storybook.js.org\/blog\/7-0-beta\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/storybook.js.org\/blog\/7-0-beta\/\">https:\/\/storybook.js.org\/blog\/7-0-beta\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Podsumowanie roku od Node Weekly i React Weekly<\/h2>\n","innerContent":["\n<h2>3. Podsumowanie roku od Node Weekly i React Weekly<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wielkimi krokami zbli\u017camy si\u0119 do ko\u0144ca roku, a to oznacza, \u017ce okres wszelakich podsumowa\u0144 jest ju\u017c w pe\u0142ni. W minionym tygodniu Peter Cooper, czyli autor bardzo popularnych newsleter\u00f3w dotycz\u0105cych JavaScriptu (mi\u0119dzy innymi React Status, Node Weekly, JavaScript Weekly), zdecydowa\u0142 si\u0119 po\u015bwi\u0119ci\u0107 kilka ze swoich publikacji podsumowaniu najlepszych artyku\u0142\u00f3w z minionego roku. Je\u015bli w trakcie przerwy \u015bwi\u0105tecznej b\u0119dziecie szuka\u0107 czego\u015b do lektury, to na pewno znajdziecie tu co\u015b dla siebie.<\/p>\n","innerContent":["\n<p>Wielkimi krokami zbli\u017camy si\u0119 do ko\u0144ca roku, a to oznacza, \u017ce okres wszelakich podsumowa\u0144 jest ju\u017c w pe\u0142ni. W minionym tygodniu Peter Cooper, czyli autor bardzo popularnych newsleter\u00f3w dotycz\u0105cych JavaScriptu (mi\u0119dzy innymi React Status, Node Weekly, JavaScript Weekly), zdecydowa\u0142 si\u0119 po\u015bwi\u0119ci\u0107 kilka ze swoich publikacji podsumowaniu najlepszych artyku\u0142\u00f3w z minionego roku. Je\u015bli w trakcie przerwy \u015bwi\u0105tecznej b\u0119dziecie szuka\u0107 czego\u015b do lektury, to na pewno znajdziecie tu co\u015b dla siebie.<\/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:\/\/nodeweekly.com\/issues\/467\" target=\"_blank\" rel=\"noreferrer noopener\">The Best of Node Weekly in 2022<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nodeweekly.com\/issues\/467\" target=\"_blank\" rel=\"noreferrer noopener\">The Best of Node Weekly in 2022<\/a><\/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:\/\/react.statuscode.com\/issues\/319\" target=\"_blank\" rel=\"noreferrer noopener\">The Best of React Status in 2022<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/react.statuscode.com\/issues\/319\" target=\"_blank\" rel=\"noreferrer noopener\">The Best of React Status in 2022<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":13397,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/giphy-30.gif\" alt=\"\" class=\"wp-image-13397\"\/><figcaption class=\"wp-element-caption\">A je\u015bli szukacie czego\u015b do ogl\u0105dania przez \u015bwi\u0119ta, to ja ostatnio wr\u00f3ci\u0142em do \"Dr House\" i naprawd\u0119 zestarza\u0142 sie z gracj\u0105<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/giphy-30.gif\" alt=\"\" class=\"wp-image-13397\"\/><figcaption class=\"wp-element-caption\">A je\u015bli szukacie czego\u015b do ogl\u0105dania przez \u015bwi\u0119ta, to ja ostatnio wr\u00f3ci\u0142em do \"Dr House\" i naprawd\u0119 zestarza\u0142 sie z gracj\u0105<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z racji tego, \u017ce jest to ju\u017c ostatnia edycja naszego przegl\u0105du w tym roku, \u017cycz\u0119 Wszystkim pysznego barszczyku i szampa\u0144skiego sylwestra. Do zobaczenia za rok! <\/p>\n","innerContent":["\n<p>Z racji tego, \u017ce jest to ju\u017c ostatnia edycja naszego przegl\u0105du w tym roku, \u017cycz\u0119 Wszystkim pysznego barszczyku i szampa\u0144skiego sylwestra. Do zobaczenia za rok! <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":13381,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/giphy-29-1.gif\" alt=\"\" class=\"wp-image-13381\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/giphy-29-1.gif\" alt=\"\" class=\"wp-image-13381\"\/><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/13376","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=13376"}],"version-history":[{"count":10,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/13376\/revisions"}],"predecessor-version":[{"id":13400,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/13376\/revisions\/13400"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/13383"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=13376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=13376"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=13376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}