{"id":9959,"date":"2022-06-09T16:32:50","date_gmt":"2022-06-09T14:32:50","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/"},"modified":"2022-09-19T13:16:27","modified_gmt":"2022-09-19T11:16:27","slug":"frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/","title":{"rendered":"Frontend Thursday vol. 91 &#8211; Safari z wsparciem dla Web Push Notifications i Angular 14"},"content":{"rendered":"\n<h2 id=\"1-wwdc-safari-z-wsparciem-dla-web-push-notifications-api\" data-num=1>1. WWDC &#8211; Safari z wsparciem dla Web Push Notifications API<\/h2>\n\n\n\n<p>W minionym tygodniu wraz z konferencj\u0105 WWDC zako\u0144czyli\u015bmy wiosenny sezon konferencji deweloperski. Ku mojemu zaskoczeniu, konferencja Apple przynios\u0142a ca\u0142kiem sporo nowinek ze \u015bwiata Web Developmentu (r\u00f3wnie\u017c je\u015bli chodzi o ekosystem Apple, ale o tym na pewno przeczytacie wi\u0119cej w sobotnim przegl\u0105dzie).&nbsp;<\/p>\n\n\n\n<p>Zacznijmy od bomby jak\u0105 zrzuci\u0142o Apple. Safari 16 b\u0119dzie wspiera\u0107 Web Push Notification API, a w 2023 roku podobnego wsparcia mo\u017cemy si\u0119 spodziewa\u0107 te\u017c w mobilnym Safari. Oznacza to, \u017ce jeste\u015bmy o krok bli\u017cej, aby mo\u017cliwe sta\u0142o si\u0119 zast\u0105pienie natywnych aplikacji PWA. Gdyby tylko Apple zgodzi\u0142o si\u0119 jeszcze wy\u015bwietla\u0107 u\u017cytkownikowi zach\u0119t\u0119 do instalacji PWA, albo chocia\u017c przenios\u0142o przycisk do tego s\u0142u\u017c\u0105cy w odrobin\u0119 bardziej widoczne miejsce\u2026<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858a8cf291.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest wsparcie dla Container Queries, czyli funkcjonalno\u015bci na kt\u00f3r\u0105 czeka\u0142em ju\u017c od bardzo dawna (pierwszy raz pisali\u015bmy o nich ju\u017c w <a href=\"https:\/\/vived.io\/frontend-thursday-vol-38\/\">Frontend Thursday vol. 38<\/a>). Container Queries pozwalaj\u0105 nam tworzy\u0107 responsywne komponenty, ale ich zachowanie uzale\u017cnione jest od wysoko\u015bci i szeroko\u015bci kontenera (dowolny element HTML), a nie ca\u0142ej strony. Dzi\u0119ki nowemu API b\u0119dziemy mogli stworzy\u0107 na przyk\u0142ad responsywny baner, kt\u00f3ry w zale\u017cno\u015bci od umiejscowienia na stronie b\u0119dzie wygl\u0105da\u0142 odrobin\u0119 inaczej. Mam nadziej\u0119, \u017ce ruch ze strony Apple zmusi do dzia\u0142ania r\u00f3wnie\u017c Google (kt\u00f3ry r\u00f3wnie\u017c zaimplementowa\u0142 t\u0119 funkcjonalno\u015b\u0107, ale do tej pory ukrywa\u0142 j\u0105 za feature flag\u0105) i Mozill\u0119. Czekam z niecierpliwo\u015bci\u0105, a\u017c Container Queries stan\u0105 si\u0119 og\u00f3lnie wspiera funkcjonalno\u015bci\u0105 &#8211; to b\u0119dzie nowy wspanialszy \u015bwiat.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858a956b89.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">\/* when the parent container is smaller than 850px, \nremove the .links div and decrease the font size on \nthe episode time marker *\/\n@container (max-width: 850px) {\n  .links {\n    display: none;\n  }\n\n  .time {\n    font-size: 1.25rem;\n  }\n\n  \/* ... *\/\n}<\/code><\/pre>\n\n\n\n<p>Safari 16 to te\u017c sporo usprawnie\u0144 dla deweloper\u00f3w. Nowa wersja przegl\u0105darki od Apple dostarczy Web Inspector Extensions. Oznacza to, \u017ce tw\u00f3rcy narz\u0119dzi deweloperskich b\u0119d\u0105 mogli przygotowa\u0107 porty debugger\u00f3w do Angulara, Vue czy Reacta dla Safari. Je\u015bli jeste\u015bmy ju\u017c w temacie debugowania, to do nowego Safari trafi te\u017c Flexbox Inspector. Niestety, patrz\u0105c na dostarczone przez Apple screenshoty, nie umywa si\u0119 do tego znanego z Chrome.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858aa57c51.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>To jeszcze nie koniec nowo\u015bci, bo do Safari zmierza r\u00f3wnie\u017c wsparcie dla subgrid czy Shared Workers. Kto by si\u0119 spodziewa\u0142, \u017ce Internet Explorer naszych czas\u00f3w tak pozytywnie nas zaskoczy. Aczkolwiek mo\u017ce to by\u0107 r\u00f3wnie\u017c kwestia tego, \u017ce Safari nie jest wydawane w tzw. Release Train. Gdyby zagregowa\u0107 najwi\u0119ksze nowo\u015bci z Chrome na przestrzeni ostatniego roku, to te\u017c by\u0142oby tego sporo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/webkit.org\/blog\/12824\/news-from-wwdc-webkit-features-in-safari-16-beta\/\">https:\/\/webkit.org\/blog\/12824\/news-from-wwdc-webkit-features-in-safari-16-beta\/<\/a><br><a href=\"https:\/\/webkit.org\/blog\/12945\/meet-web-push\/\">https:\/\/webkit.org\/blog\/12945\/meet-web-push\/<\/a><\/p>\n\n\n\n<h2 id=\"2-angular-14\" data-num=2>2. Angular 14<\/h2>\n\n\n\n<p>Angularowy poci\u0105g wyda\u0144 ponownie dojecha\u0142 na stacj\u0119 z punktualno\u015bci\u0105 godn\u0105 szwajcarskiego zegarka. Co wi\u0119cej, w odr\u00f3\u017cnieniu od kilku ostatnich wyda\u0144, Angular 14 przynosi wreszcie ciekawe usprawnienia. Ba, rozwi\u0105zane zosta\u0142o kilka z najpopularniejszych Issues na GitHubie!<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858ab00950.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>Najwi\u0119ksz\u0105 nowo\u015bci\u0105 s\u0105 zapowiadane od dawna Standalone Components. Zanim przejdziemy do konkret\u00f3w, odrobina kontekstu dla tych z Was, kt\u00f3rzy z Angularem nie maj\u0105 na co dzie\u0144 do czynienia. Dependency Injection to mechanizm w Angularze, dzi\u0119ki kt\u00f3remu Angular w \u201cauto-magiczny\u201d spos\u00f3b wie jak tworzy\u0107 komponenty, serwisy czy dyrektywy. Aby Dependency Injection dzia\u0142a\u0142o poprawnie, ka\u017cdy komponent, serwis, czy dyrektywa musi by\u0107 cz\u0119\u015bci\u0105 Angularowego Modu\u0142u. Tutaj warto zatrzyma\u0107 si\u0119 na chwil\u0119 i zaznaczy\u0107, \u017ce Angularowe modu\u0142y maj\u0105 niewiele wsp\u00f3lnego z JavaScriptowymi modu\u0142ami. Te drugie pozwalaj\u0105 podzieli\u0107 aplikacj\u0119 na wiele plik\u00f3w i zarz\u0105dza\u0107 udost\u0119pnianym API. Te pierwsze maj\u0105 na celu zapewnia\u0107 konfiguracj\u0119 zale\u017cno\u015bci dla Dependency Injection.<\/p>\n\n\n\n<p>W ostatnich latach Angularowa spo\u0142eczno\u015b\u0107 powoli zmierza\u0142a w kierunku tworzenia osobnych modu\u0142\u00f3w dla ka\u017cdego komponentu. Jak mo\u017cecie sobie wyobrazi\u0107 generowa\u0142o to niesamowite ilo\u015bci wt\u00f3rnego kodu. Wraz z Angularem 14 b\u0119dziemy mogli wreszcie pozby\u0107 si\u0119 nadmiarowych modu\u0142\u00f3w i zast\u0105pi\u0107 je dwoma dodatkowymi parametrami w dyrektywie @Component. Oczywi\u015bcie nie oznacza to, \u017ce modu\u0142y ca\u0142kowicie znikaj\u0105 z Angulara &#8211; w wielu miejscach nadal s\u0105 one nie do zast\u0105pienia i raczej nic nie zapowiada zmiany stanu rzeczy w najbli\u017cszych miesi\u0105cach.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858ab66c33.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>Kolejn\u0105 wyczekiwan\u0105 przez spo\u0142eczno\u015b\u0107 nowo\u015bci\u0105 jest lepsze wsparcie dla typ\u00f3w w Angular Reactive Forms. Do tej pory Reactive Forms w du\u017cej mierze opiera\u0142y si\u0119 o typ `any`. To ju\u017c nie rok 2010, wi\u0119c spo\u0142eczno\u015b\u0107 od lat regularnie podnosi problem i pozostawiona bez wsparcia pr\u00f3bowa\u0142a radzi\u0107 sobie samemu. Ilo\u015b\u0107 bibliotek dodaj\u0105cych typy do Reactive Forms zdecydowanie nie przystoi zopiniowanemu frameworkowi jakim jest Angular. Na szcz\u0119\u015bcie lepiej p\u00f3\u017ano ni\u017c wcale zesp\u00f3\u0142 Angulara wys\u0142ucha\u0142 spo\u0142eczno\u015b\u0107 i doda\u0142 upragnione typy do formularzy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858abea249.gif\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>W\u015br\u00f3d nowo\u015bci znajdziemy jeszcze kilka drobnych usprawnie\u0144. Na szczeg\u00f3ln\u0105 uwag\u0119 zas\u0142uguje mo\u017cliwo\u015b\u0107 definiowania tytu\u0142\u00f3w stron w konfiguracji routingu, lepsze wiadomo\u015bci b\u0142\u0119d\u00f3w i odblokowanie dost\u0119pu do p\u00f3l oznaczonych jako `protected` w template\u2019ach.<\/p>\n\n\n\n<p>Angular 14 wydaje si\u0119 by\u0107 naprawd\u0119 ciekawym releasem. Trzeba jednak przyzna\u0107, \u017ce nowo\u015bci z React 18 przy\u0107miewaj\u0105 jego blask. Jasne, React 18 powstawa\u0142 prawie 3 lata, ale mimo wszystko ci\u0119\u017cko nie zauwa\u017cy\u0107, \u017ce React nieustannie stara si\u0119 wprowadza\u0107 do Frontendu nowe koncepty, podczas gdy Angular skupia si\u0119 na naprawianiu istniej\u0105cych od lat problem\u00f3w.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858b00b3e6.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>PS: Je\u015bli szukacie dobrych materia\u0142\u00f3w troch\u0119 dog\u0142\u0119bniej opisuj\u0105cych nowo\u015bci Anuglara to zdecydowanie polecam<a href=\"https:\/\/netbasal.com\/whats-new-in-angular-v14-df1b0c5d5e2f\"> t\u0119 seri\u0119 artyku\u0142\u00f3w od Netanel Basala<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/blog.angular.io\/angular-v14-is-now-available-391a6db736af\">https:\/\/blog.angular.io\/angular-v14-is-now-available-391a6db736af<\/a><\/p>\n\n\n\n<h2 id=\"bonus-1-microsoft-word-jako-silnik-gier-2d-czemu-nie\" data-num=3>Bonus 1 &#8211; Microsoft Word jako silnik gier 2D? Czemu nie!<\/h2>\n\n\n\n<p>Wiedzieli\u015bcie, \u017ce Microsoft kilka tygodni temu doda\u0142 do swojego edytora tekstu mechanizm add-ins, dzi\u0119ki kt\u00f3remu mo\u017cemy zautomatyzowa\u0107 cz\u0119sto powtarzane czynno\u015bci. Nie musieli\u015bmy d\u0142ugo czeka\u0107, a\u017c kto\u015b pomy\u015bla\u0142 \u201cMicrosoft Word to \u015bwietny silnik do pisanie gier 2D\u201d i postanowi\u0142 wykorzysta\u0107 nowe mo\u017cliwo\u015bci, aby stworzy\u0107 prost\u0105 gr\u0119 2D. Mo\u017ce i nie jest to najpotrzebniejsza wiedza, ale przyjemnie popatrze\u0107 jak kto\u015b pr\u00f3buje wykorzysta\u0107 API stworzone w bardzo konkretnym celu do czego\u015b zupe\u0142nie innego.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"I Made A GAME In MICROSOFT WORD | Devlog\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/ZbirrsL0gSQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 id=\"bonus-2-useeffect-zrodlem-wszelkiego-zla-we-wszechswiecie\" data-num=4>Bonus 2 &#8211; useEffect \u017ar\u00f3d\u0142em wszelkiego z\u0142a we wszech\u015bwiecie?<\/h2>\n\n\n\n<p>Nie od dzi\u015b wiadomo, \u017ce useEffect to najbardziej skomplikowany koncepcyjnie hook w Reactie. Niesko\u0144czona p\u0119tla? Nic trudnego, wystarczy zapomnie\u0107 o tablicy z zale\u017cno\u015bciami. Memory Leak? R\u00f3wnie\u017c nic trudnego, wystarczy zapomnie\u0107 o poprawnej implementacji funkcji zwracanej z `useEffect`. Kto nigdy nie wprowadzi\u0142 buga, \u017ale u\u017cywaj\u0105c `useEffect` niech pierwszy rzuci kamieniem.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858b0e458a.gif\" alt=\"\"\/><figcaption>Autor Frontend Thursday w momencie jego publikacji &#8211; koloryzowane<\/figcaption><\/figure><\/div>\n\n\n<p><\/p>\n\n\n\n<p>W podlinkowanej poni\u017cej prezentacji z ostatniego Reactathon znajdziecie jeszcze wi\u0119cej podobnych przyk\u0142ad\u00f3w, a ponadto troch\u0119 wzorc\u00f3w, kt\u00f3re pozwol\u0105 Wam unika\u0107 nadmiarowych wywo\u0142a\u0144 `useEffect`. Zdecydowanie polecam!<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Goodbye, useEffect: David Khourshid\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/HPoC-k7Rxwo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>W minionym tygodniu Apple zako\u0144czy\u0142o sezon konferencji deweloperskich. Ku mojemu zaskoczeniu, zapowiedzianych zosta\u0142o ca\u0142kiem sporo nowo\u015bci ciekawych z perspektywy Frontend Developera. Poza tym \u015bwiat\u0142o dzienne ujrza\u0142 Angular 14, kt\u00f3ry adresuje kilka bardzo popularny na GitHubie Issue. \u0141apcie co\u015b zimnego do picia \ud83c\udf78 i jak co czwartek zapraszamy do lektury \ud83d\uddde<\/p>\n","protected":false},"author":12,"featured_media":8134,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-9959","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png","feature_image_visible":false,"estimated_reading_time":"5","feature_image_blog":{"ID":8136,"id":8136,"title":"Exus5lLVEAEjbdh","filename":"Exus5lLVEAEjbdh.jpeg","filesize":28597,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh.jpeg","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/exus5llveaejbdh-2\/","alt":"","author":"12","description":"","caption":"","name":"exus5llveaejbdh-2","status":"inherit","uploaded_to":9959,"date":"2022-06-09 14:31:44","modified":"2022-06-09 14:31:44","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1024,"height":576,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh-300x169.jpeg","medium-width":300,"medium-height":169,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh-768x432.jpeg","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh.jpeg","large-width":1024,"large-height":576,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh.jpeg","1536x1536-width":1024,"1536x1536-height":576,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh.jpeg","2048x2048-width":1024,"2048x2048-height":576,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":169,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":225,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Exus5lLVEAEjbdh.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":338}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Frontend Thursday vol. 91 - Safari z wsparciem dla Web Push Notifications i Angular 14 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 91 - Safari z wsparciem dla Web Push Notifications i Angular 14 - Vived\" \/>\n<meta property=\"og:description\" content=\"W minionym tygodniu Apple zako\u0144czy\u0142o sezon konferencji deweloperskich. Ku mojemu zaskoczeniu, zapowiedzianych zosta\u0142o ca\u0142kiem sporo nowo\u015bci ciekawych z perspektywy Frontend Developera. Poza tym \u015bwiat\u0142o dzienne ujrza\u0142 Angular 14, kt\u00f3ry adresuje kilka bardzo popularny na GitHubie Issue. \u0141apcie co\u015b zimnego do picia \ud83c\udf78 i jak co czwartek zapraszamy do lektury \ud83d\uddde\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-09T14:32:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.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\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 91 &#8211; Safari z wsparciem dla Web Push Notifications i Angular 14\",\"datePublished\":\"2022-06-09T14:32:50+00:00\",\"dateModified\":\"2022-09-19T11:16:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/\"},\"wordCount\":1148,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/\",\"name\":\"Frontend Thursday vol. 91 - Safari z wsparciem dla Web Push Notifications i Angular 14 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png\",\"datePublished\":\"2022-06-09T14:32:50+00:00\",\"dateModified\":\"2022-09-19T11:16:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 91 &#8211; Safari z wsparciem dla Web Push Notifications i Angular 14\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Frontend Thursday vol. 91 - Safari z wsparciem dla Web Push Notifications i Angular 14 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 91 - Safari z wsparciem dla Web Push Notifications i Angular 14 - Vived","og_description":"W minionym tygodniu Apple zako\u0144czy\u0142o sezon konferencji deweloperskich. Ku mojemu zaskoczeniu, zapowiedzianych zosta\u0142o ca\u0142kiem sporo nowo\u015bci ciekawych z perspektywy Frontend Developera. Poza tym \u015bwiat\u0142o dzienne ujrza\u0142 Angular 14, kt\u00f3ry adresuje kilka bardzo popularny na GitHubie Issue. \u0141apcie co\u015b zimnego do picia \ud83c\udf78 i jak co czwartek zapraszamy do lektury \ud83d\uddde","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/","og_site_name":"Vived","article_published_time":"2022-06-09T14:32:50+00:00","article_modified_time":"2022-09-19T11:16:27+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.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\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 91 &#8211; Safari z wsparciem dla Web Push Notifications i Angular 14","datePublished":"2022-06-09T14:32:50+00:00","dateModified":"2022-09-19T11:16:27+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/"},"wordCount":1148,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/","name":"Frontend Thursday vol. 91 - Safari z wsparciem dla Web Push Notifications i Angular 14 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png","datePublished":"2022-06-09T14:32:50+00:00","dateModified":"2022-09-19T11:16:27+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-1.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-91-safari-z-wsparciem-dla-web-push-notifications-i-angular-14\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 91 &#8211; Safari z wsparciem dla Web Push Notifications i Angular 14"}]},{"@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. WWDC - Safari z wsparciem dla Web Push Notifications API<\/h2>\n","innerContent":["\n<h2>1. WWDC - Safari z wsparciem dla Web Push Notifications API<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W minionym tygodniu wraz z konferencj\u0105 WWDC zako\u0144czyli\u015bmy wiosenny sezon konferencji deweloperski. Ku mojemu zaskoczeniu, konferencja Apple przynios\u0142a ca\u0142kiem sporo nowinek ze \u015bwiata Web Developmentu (r\u00f3wnie\u017c je\u015bli chodzi o ekosystem Apple, ale o tym na pewno przeczytacie wi\u0119cej w sobotnim przegl\u0105dzie).&nbsp;<\/p>\n","innerContent":["\n<p>W minionym tygodniu wraz z konferencj\u0105 WWDC zako\u0144czyli\u015bmy wiosenny sezon konferencji deweloperski. Ku mojemu zaskoczeniu, konferencja Apple przynios\u0142a ca\u0142kiem sporo nowinek ze \u015bwiata Web Developmentu (r\u00f3wnie\u017c je\u015bli chodzi o ekosystem Apple, ale o tym na pewno przeczytacie wi\u0119cej w sobotnim przegl\u0105dzie).&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od bomby jak\u0105 zrzuci\u0142o Apple. Safari 16 b\u0119dzie wspiera\u0107 Web Push Notification API, a w 2023 roku podobnego wsparcia mo\u017cemy si\u0119 spodziewa\u0107 te\u017c w mobilnym Safari. Oznacza to, \u017ce jeste\u015bmy o krok bli\u017cej, aby mo\u017cliwe sta\u0142o si\u0119 zast\u0105pienie natywnych aplikacji PWA. Gdyby tylko Apple zgodzi\u0142o si\u0119 jeszcze wy\u015bwietla\u0107 u\u017cytkownikowi zach\u0119t\u0119 do instalacji PWA, albo chocia\u017c przenios\u0142o przycisk do tego s\u0142u\u017c\u0105cy w odrobin\u0119 bardziej widoczne miejsce\u2026<\/p>\n","innerContent":["\n<p>Zacznijmy od bomby jak\u0105 zrzuci\u0142o Apple. Safari 16 b\u0119dzie wspiera\u0107 Web Push Notification API, a w 2023 roku podobnego wsparcia mo\u017cemy si\u0119 spodziewa\u0107 te\u017c w mobilnym Safari. Oznacza to, \u017ce jeste\u015bmy o krok bli\u017cej, aby mo\u017cliwe sta\u0142o si\u0119 zast\u0105pienie natywnych aplikacji PWA. Gdyby tylko Apple zgodzi\u0142o si\u0119 jeszcze wy\u015bwietla\u0107 u\u017cytkownikowi zach\u0119t\u0119 do instalacji PWA, albo chocia\u017c przenios\u0142o przycisk do tego s\u0142u\u017c\u0105cy w odrobin\u0119 bardziej widoczne miejsce\u2026<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858a8cf291.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858a8cf291.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest wsparcie dla Container Queries, czyli funkcjonalno\u015bci na kt\u00f3r\u0105 czeka\u0142em ju\u017c od bardzo dawna (pierwszy raz pisali\u015bmy o nich ju\u017c w <a href=\"https:\/\/vived.io\/frontend-thursday-vol-38\/\">Frontend Thursday vol. 38<\/a>). Container Queries pozwalaj\u0105 nam tworzy\u0107 responsywne komponenty, ale ich zachowanie uzale\u017cnione jest od wysoko\u015bci i szeroko\u015bci kontenera (dowolny element HTML), a nie ca\u0142ej strony. Dzi\u0119ki nowemu API b\u0119dziemy mogli stworzy\u0107 na przyk\u0142ad responsywny baner, kt\u00f3ry w zale\u017cno\u015bci od umiejscowienia na stronie b\u0119dzie wygl\u0105da\u0142 odrobin\u0119 inaczej. Mam nadziej\u0119, \u017ce ruch ze strony Apple zmusi do dzia\u0142ania r\u00f3wnie\u017c Google (kt\u00f3ry r\u00f3wnie\u017c zaimplementowa\u0142 t\u0119 funkcjonalno\u015b\u0107, ale do tej pory ukrywa\u0142 j\u0105 za feature flag\u0105) i Mozill\u0119. Czekam z niecierpliwo\u015bci\u0105, a\u017c Container Queries stan\u0105 si\u0119 og\u00f3lnie wspiera funkcjonalno\u015bci\u0105 - to b\u0119dzie nowy wspanialszy \u015bwiat.<\/p>\n","innerContent":["\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest wsparcie dla Container Queries, czyli funkcjonalno\u015bci na kt\u00f3r\u0105 czeka\u0142em ju\u017c od bardzo dawna (pierwszy raz pisali\u015bmy o nich ju\u017c w <a href=\"https:\/\/vived.io\/frontend-thursday-vol-38\/\">Frontend Thursday vol. 38<\/a>). Container Queries pozwalaj\u0105 nam tworzy\u0107 responsywne komponenty, ale ich zachowanie uzale\u017cnione jest od wysoko\u015bci i szeroko\u015bci kontenera (dowolny element HTML), a nie ca\u0142ej strony. Dzi\u0119ki nowemu API b\u0119dziemy mogli stworzy\u0107 na przyk\u0142ad responsywny baner, kt\u00f3ry w zale\u017cno\u015bci od umiejscowienia na stronie b\u0119dzie wygl\u0105da\u0142 odrobin\u0119 inaczej. Mam nadziej\u0119, \u017ce ruch ze strony Apple zmusi do dzia\u0142ania r\u00f3wnie\u017c Google (kt\u00f3ry r\u00f3wnie\u017c zaimplementowa\u0142 t\u0119 funkcjonalno\u015b\u0107, ale do tej pory ukrywa\u0142 j\u0105 za feature flag\u0105) i Mozill\u0119. Czekam z niecierpliwo\u015bci\u0105, a\u017c Container Queries stan\u0105 si\u0119 og\u00f3lnie wspiera funkcjonalno\u015bci\u0105 - to b\u0119dzie nowy wspanialszy \u015bwiat.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858a956b89.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858a956b89.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"css"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">\/* when the parent container is smaller than 850px, \nremove the .links div and decrease the font size on \nthe episode time marker *\/\n@container (max-width: 850px) {\n  .links {\n    display: none;\n  }\n\n  .time {\n    font-size: 1.25rem;\n  }\n\n  \/* ... *\/\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">\/* when the parent container is smaller than 850px, \nremove the .links div and decrease the font size on \nthe episode time marker *\/\n@container (max-width: 850px) {\n  .links {\n    display: none;\n  }\n\n  .time {\n    font-size: 1.25rem;\n  }\n\n  \/* ... *\/\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Safari 16 to te\u017c sporo usprawnie\u0144 dla deweloper\u00f3w. Nowa wersja przegl\u0105darki od Apple dostarczy Web Inspector Extensions. Oznacza to, \u017ce tw\u00f3rcy narz\u0119dzi deweloperskich b\u0119d\u0105 mogli przygotowa\u0107 porty debugger\u00f3w do Angulara, Vue czy Reacta dla Safari. Je\u015bli jeste\u015bmy ju\u017c w temacie debugowania, to do nowego Safari trafi te\u017c Flexbox Inspector. Niestety, patrz\u0105c na dostarczone przez Apple screenshoty, nie umywa si\u0119 do tego znanego z Chrome.<\/p>\n","innerContent":["\n<p>Safari 16 to te\u017c sporo usprawnie\u0144 dla deweloper\u00f3w. Nowa wersja przegl\u0105darki od Apple dostarczy Web Inspector Extensions. Oznacza to, \u017ce tw\u00f3rcy narz\u0119dzi deweloperskich b\u0119d\u0105 mogli przygotowa\u0107 porty debugger\u00f3w do Angulara, Vue czy Reacta dla Safari. Je\u015bli jeste\u015bmy ju\u017c w temacie debugowania, to do nowego Safari trafi te\u017c Flexbox Inspector. Niestety, patrz\u0105c na dostarczone przez Apple screenshoty, nie umywa si\u0119 do tego znanego z Chrome.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858aa57c51.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858aa57c51.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jeszcze nie koniec nowo\u015bci, bo do Safari zmierza r\u00f3wnie\u017c wsparcie dla subgrid czy Shared Workers. Kto by si\u0119 spodziewa\u0142, \u017ce Internet Explorer naszych czas\u00f3w tak pozytywnie nas zaskoczy. Aczkolwiek mo\u017ce to by\u0107 r\u00f3wnie\u017c kwestia tego, \u017ce Safari nie jest wydawane w tzw. Release Train. Gdyby zagregowa\u0107 najwi\u0119ksze nowo\u015bci z Chrome na przestrzeni ostatniego roku, to te\u017c by\u0142oby tego sporo.<\/p>\n","innerContent":["\n<p>To jeszcze nie koniec nowo\u015bci, bo do Safari zmierza r\u00f3wnie\u017c wsparcie dla subgrid czy Shared Workers. Kto by si\u0119 spodziewa\u0142, \u017ce Internet Explorer naszych czas\u00f3w tak pozytywnie nas zaskoczy. Aczkolwiek mo\u017ce to by\u0107 r\u00f3wnie\u017c kwestia tego, \u017ce Safari nie jest wydawane w tzw. Release Train. Gdyby zagregowa\u0107 najwi\u0119ksze nowo\u015bci z Chrome na przestrzeni ostatniego roku, to te\u017c by\u0142oby tego sporo.<\/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:\/\/webkit.org\/blog\/12824\/news-from-wwdc-webkit-features-in-safari-16-beta\/\">https:\/\/webkit.org\/blog\/12824\/news-from-wwdc-webkit-features-in-safari-16-beta\/<\/a><br><a href=\"https:\/\/webkit.org\/blog\/12945\/meet-web-push\/\">https:\/\/webkit.org\/blog\/12945\/meet-web-push\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/webkit.org\/blog\/12824\/news-from-wwdc-webkit-features-in-safari-16-beta\/\">https:\/\/webkit.org\/blog\/12824\/news-from-wwdc-webkit-features-in-safari-16-beta\/<\/a><br><a href=\"https:\/\/webkit.org\/blog\/12945\/meet-web-push\/\">https:\/\/webkit.org\/blog\/12945\/meet-web-push\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Angular 14<\/h2>\n","innerContent":["\n<h2>2. Angular 14<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Angularowy poci\u0105g wyda\u0144 ponownie dojecha\u0142 na stacj\u0119 z punktualno\u015bci\u0105 godn\u0105 szwajcarskiego zegarka. Co wi\u0119cej, w odr\u00f3\u017cnieniu od kilku ostatnich wyda\u0144, Angular 14 przynosi wreszcie ciekawe usprawnienia. Ba, rozwi\u0105zane zosta\u0142o kilka z najpopularniejszych Issues na GitHubie!<\/p>\n","innerContent":["\n<p>Angularowy poci\u0105g wyda\u0144 ponownie dojecha\u0142 na stacj\u0119 z punktualno\u015bci\u0105 godn\u0105 szwajcarskiego zegarka. Co wi\u0119cej, w odr\u00f3\u017cnieniu od kilku ostatnich wyda\u0144, Angular 14 przynosi wreszcie ciekawe usprawnienia. Ba, rozwi\u0105zane zosta\u0142o kilka z najpopularniejszych Issues na GitHubie!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858ab00950.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858ab00950.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najwi\u0119ksz\u0105 nowo\u015bci\u0105 s\u0105 zapowiadane od dawna Standalone Components. Zanim przejdziemy do konkret\u00f3w, odrobina kontekstu dla tych z Was, kt\u00f3rzy z Angularem nie maj\u0105 na co dzie\u0144 do czynienia. Dependency Injection to mechanizm w Angularze, dzi\u0119ki kt\u00f3remu Angular w \u201cauto-magiczny\u201d spos\u00f3b wie jak tworzy\u0107 komponenty, serwisy czy dyrektywy. Aby Dependency Injection dzia\u0142a\u0142o poprawnie, ka\u017cdy komponent, serwis, czy dyrektywa musi by\u0107 cz\u0119\u015bci\u0105 Angularowego Modu\u0142u. Tutaj warto zatrzyma\u0107 si\u0119 na chwil\u0119 i zaznaczy\u0107, \u017ce Angularowe modu\u0142y maj\u0105 niewiele wsp\u00f3lnego z JavaScriptowymi modu\u0142ami. Te drugie pozwalaj\u0105 podzieli\u0107 aplikacj\u0119 na wiele plik\u00f3w i zarz\u0105dza\u0107 udost\u0119pnianym API. Te pierwsze maj\u0105 na celu zapewnia\u0107 konfiguracj\u0119 zale\u017cno\u015bci dla Dependency Injection.<\/p>\n","innerContent":["\n<p>Najwi\u0119ksz\u0105 nowo\u015bci\u0105 s\u0105 zapowiadane od dawna Standalone Components. Zanim przejdziemy do konkret\u00f3w, odrobina kontekstu dla tych z Was, kt\u00f3rzy z Angularem nie maj\u0105 na co dzie\u0144 do czynienia. Dependency Injection to mechanizm w Angularze, dzi\u0119ki kt\u00f3remu Angular w \u201cauto-magiczny\u201d spos\u00f3b wie jak tworzy\u0107 komponenty, serwisy czy dyrektywy. Aby Dependency Injection dzia\u0142a\u0142o poprawnie, ka\u017cdy komponent, serwis, czy dyrektywa musi by\u0107 cz\u0119\u015bci\u0105 Angularowego Modu\u0142u. Tutaj warto zatrzyma\u0107 si\u0119 na chwil\u0119 i zaznaczy\u0107, \u017ce Angularowe modu\u0142y maj\u0105 niewiele wsp\u00f3lnego z JavaScriptowymi modu\u0142ami. Te drugie pozwalaj\u0105 podzieli\u0107 aplikacj\u0119 na wiele plik\u00f3w i zarz\u0105dza\u0107 udost\u0119pnianym API. Te pierwsze maj\u0105 na celu zapewnia\u0107 konfiguracj\u0119 zale\u017cno\u015bci dla Dependency Injection.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W ostatnich latach Angularowa spo\u0142eczno\u015b\u0107 powoli zmierza\u0142a w kierunku tworzenia osobnych modu\u0142\u00f3w dla ka\u017cdego komponentu. Jak mo\u017cecie sobie wyobrazi\u0107 generowa\u0142o to niesamowite ilo\u015bci wt\u00f3rnego kodu. Wraz z Angularem 14 b\u0119dziemy mogli wreszcie pozby\u0107 si\u0119 nadmiarowych modu\u0142\u00f3w i zast\u0105pi\u0107 je dwoma dodatkowymi parametrami w dyrektywie @Component. Oczywi\u015bcie nie oznacza to, \u017ce modu\u0142y ca\u0142kowicie znikaj\u0105 z Angulara - w wielu miejscach nadal s\u0105 one nie do zast\u0105pienia i raczej nic nie zapowiada zmiany stanu rzeczy w najbli\u017cszych miesi\u0105cach.<\/p>\n","innerContent":["\n<p>W ostatnich latach Angularowa spo\u0142eczno\u015b\u0107 powoli zmierza\u0142a w kierunku tworzenia osobnych modu\u0142\u00f3w dla ka\u017cdego komponentu. Jak mo\u017cecie sobie wyobrazi\u0107 generowa\u0142o to niesamowite ilo\u015bci wt\u00f3rnego kodu. Wraz z Angularem 14 b\u0119dziemy mogli wreszcie pozby\u0107 si\u0119 nadmiarowych modu\u0142\u00f3w i zast\u0105pi\u0107 je dwoma dodatkowymi parametrami w dyrektywie @Component. Oczywi\u015bcie nie oznacza to, \u017ce modu\u0142y ca\u0142kowicie znikaj\u0105 z Angulara - w wielu miejscach nadal s\u0105 one nie do zast\u0105pienia i raczej nic nie zapowiada zmiany stanu rzeczy w najbli\u017cszych miesi\u0105cach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858ab66c33.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858ab66c33.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejn\u0105 wyczekiwan\u0105 przez spo\u0142eczno\u015b\u0107 nowo\u015bci\u0105 jest lepsze wsparcie dla typ\u00f3w w Angular Reactive Forms. Do tej pory Reactive Forms w du\u017cej mierze opiera\u0142y si\u0119 o typ `any`. To ju\u017c nie rok 2010, wi\u0119c spo\u0142eczno\u015b\u0107 od lat regularnie podnosi problem i pozostawiona bez wsparcia pr\u00f3bowa\u0142a radzi\u0107 sobie samemu. Ilo\u015b\u0107 bibliotek dodaj\u0105cych typy do Reactive Forms zdecydowanie nie przystoi zopiniowanemu frameworkowi jakim jest Angular. Na szcz\u0119\u015bcie lepiej p\u00f3\u017ano ni\u017c wcale zesp\u00f3\u0142 Angulara wys\u0142ucha\u0142 spo\u0142eczno\u015b\u0107 i doda\u0142 upragnione typy do formularzy.<\/p>\n","innerContent":["\n<p>Kolejn\u0105 wyczekiwan\u0105 przez spo\u0142eczno\u015b\u0107 nowo\u015bci\u0105 jest lepsze wsparcie dla typ\u00f3w w Angular Reactive Forms. Do tej pory Reactive Forms w du\u017cej mierze opiera\u0142y si\u0119 o typ `any`. To ju\u017c nie rok 2010, wi\u0119c spo\u0142eczno\u015b\u0107 od lat regularnie podnosi problem i pozostawiona bez wsparcia pr\u00f3bowa\u0142a radzi\u0107 sobie samemu. Ilo\u015b\u0107 bibliotek dodaj\u0105cych typy do Reactive Forms zdecydowanie nie przystoi zopiniowanemu frameworkowi jakim jest Angular. Na szcz\u0119\u015bcie lepiej p\u00f3\u017ano ni\u017c wcale zesp\u00f3\u0142 Angulara wys\u0142ucha\u0142 spo\u0142eczno\u015b\u0107 i doda\u0142 upragnione typy do formularzy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858abea249.gif\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858abea249.gif\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W\u015br\u00f3d nowo\u015bci znajdziemy jeszcze kilka drobnych usprawnie\u0144. Na szczeg\u00f3ln\u0105 uwag\u0119 zas\u0142uguje mo\u017cliwo\u015b\u0107 definiowania tytu\u0142\u00f3w stron w konfiguracji routingu, lepsze wiadomo\u015bci b\u0142\u0119d\u00f3w i odblokowanie dost\u0119pu do p\u00f3l oznaczonych jako `protected` w template\u2019ach.<\/p>\n","innerContent":["\n<p>W\u015br\u00f3d nowo\u015bci znajdziemy jeszcze kilka drobnych usprawnie\u0144. Na szczeg\u00f3ln\u0105 uwag\u0119 zas\u0142uguje mo\u017cliwo\u015b\u0107 definiowania tytu\u0142\u00f3w stron w konfiguracji routingu, lepsze wiadomo\u015bci b\u0142\u0119d\u00f3w i odblokowanie dost\u0119pu do p\u00f3l oznaczonych jako `protected` w template\u2019ach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Angular 14 wydaje si\u0119 by\u0107 naprawd\u0119 ciekawym releasem. Trzeba jednak przyzna\u0107, \u017ce nowo\u015bci z React 18 przy\u0107miewaj\u0105 jego blask. Jasne, React 18 powstawa\u0142 prawie 3 lata, ale mimo wszystko ci\u0119\u017cko nie zauwa\u017cy\u0107, \u017ce React nieustannie stara si\u0119 wprowadza\u0107 do Frontendu nowe koncepty, podczas gdy Angular skupia si\u0119 na naprawianiu istniej\u0105cych od lat problem\u00f3w.<\/p>\n","innerContent":["\n<p>Angular 14 wydaje si\u0119 by\u0107 naprawd\u0119 ciekawym releasem. Trzeba jednak przyzna\u0107, \u017ce nowo\u015bci z React 18 przy\u0107miewaj\u0105 jego blask. Jasne, React 18 powstawa\u0142 prawie 3 lata, ale mimo wszystko ci\u0119\u017cko nie zauwa\u017cy\u0107, \u017ce React nieustannie stara si\u0119 wprowadza\u0107 do Frontendu nowe koncepty, podczas gdy Angular skupia si\u0119 na naprawianiu istniej\u0105cych od lat problem\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858b00b3e6.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858b00b3e6.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: Je\u015bli szukacie dobrych materia\u0142\u00f3w troch\u0119 dog\u0142\u0119bniej opisuj\u0105cych nowo\u015bci Anuglara to zdecydowanie polecam<a href=\"https:\/\/netbasal.com\/whats-new-in-angular-v14-df1b0c5d5e2f\"> t\u0119 seri\u0119 artyku\u0142\u00f3w od Netanel Basala<\/a><\/p>\n","innerContent":["\n<p>PS: Je\u015bli szukacie dobrych materia\u0142\u00f3w troch\u0119 dog\u0142\u0119bniej opisuj\u0105cych nowo\u015bci Anuglara to zdecydowanie polecam<a href=\"https:\/\/netbasal.com\/whats-new-in-angular-v14-df1b0c5d5e2f\"> t\u0119 seri\u0119 artyku\u0142\u00f3w od Netanel Basala<\/a><\/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:\/\/blog.angular.io\/angular-v14-is-now-available-391a6db736af\">https:\/\/blog.angular.io\/angular-v14-is-now-available-391a6db736af<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/blog.angular.io\/angular-v14-is-now-available-391a6db736af\">https:\/\/blog.angular.io\/angular-v14-is-now-available-391a6db736af<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus 1 - Microsoft Word jako silnik gier 2D? Czemu nie!<\/h2>\n","innerContent":["\n<h2>Bonus 1 - Microsoft Word jako silnik gier 2D? Czemu nie!<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wiedzieli\u015bcie, \u017ce Microsoft kilka tygodni temu doda\u0142 do swojego edytora tekstu mechanizm add-ins, dzi\u0119ki kt\u00f3remu mo\u017cemy zautomatyzowa\u0107 cz\u0119sto powtarzane czynno\u015bci. Nie musieli\u015bmy d\u0142ugo czeka\u0107, a\u017c kto\u015b pomy\u015bla\u0142 \u201cMicrosoft Word to \u015bwietny silnik do pisanie gier 2D\u201d i postanowi\u0142 wykorzysta\u0107 nowe mo\u017cliwo\u015bci, aby stworzy\u0107 prost\u0105 gr\u0119 2D. Mo\u017ce i nie jest to najpotrzebniejsza wiedza, ale przyjemnie popatrze\u0107 jak kto\u015b pr\u00f3buje wykorzysta\u0107 API stworzone w bardzo konkretnym celu do czego\u015b zupe\u0142nie innego.<\/p>\n","innerContent":["\n<p>Wiedzieli\u015bcie, \u017ce Microsoft kilka tygodni temu doda\u0142 do swojego edytora tekstu mechanizm add-ins, dzi\u0119ki kt\u00f3remu mo\u017cemy zautomatyzowa\u0107 cz\u0119sto powtarzane czynno\u015bci. Nie musieli\u015bmy d\u0142ugo czeka\u0107, a\u017c kto\u015b pomy\u015bla\u0142 \u201cMicrosoft Word to \u015bwietny silnik do pisanie gier 2D\u201d i postanowi\u0142 wykorzysta\u0107 nowe mo\u017cliwo\u015bci, aby stworzy\u0107 prost\u0105 gr\u0119 2D. Mo\u017ce i nie jest to najpotrzebniejsza wiedza, ale przyjemnie popatrze\u0107 jak kto\u015b pr\u00f3buje wykorzysta\u0107 API stworzone w bardzo konkretnym celu do czego\u015b zupe\u0142nie innego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=ZbirrsL0gSQ","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=ZbirrsL0gSQ\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=ZbirrsL0gSQ\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus 2 - useEffect \u017ar\u00f3d\u0142em wszelkiego z\u0142a we wszech\u015bwiecie?<\/h2>\n","innerContent":["\n<h2>Bonus 2 - useEffect \u017ar\u00f3d\u0142em wszelkiego z\u0142a we wszech\u015bwiecie?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie od dzi\u015b wiadomo, \u017ce useEffect to najbardziej skomplikowany koncepcyjnie hook w Reactie. Niesko\u0144czona p\u0119tla? Nic trudnego, wystarczy zapomnie\u0107 o tablicy z zale\u017cno\u015bciami. Memory Leak? R\u00f3wnie\u017c nic trudnego, wystarczy zapomnie\u0107 o poprawnej implementacji funkcji zwracanej z `useEffect`. Kto nigdy nie wprowadzi\u0142 buga, \u017ale u\u017cywaj\u0105c `useEffect` niech pierwszy rzuci kamieniem.<\/p>\n","innerContent":["\n<p>Nie od dzi\u015b wiadomo, \u017ce useEffect to najbardziej skomplikowany koncepcyjnie hook w Reactie. Niesko\u0144czona p\u0119tla? Nic trudnego, wystarczy zapomnie\u0107 o tablicy z zale\u017cno\u015bciami. Memory Leak? R\u00f3wnie\u017c nic trudnego, wystarczy zapomnie\u0107 o poprawnej implementacji funkcji zwracanej z `useEffect`. Kto nigdy nie wprowadzi\u0142 buga, \u017ale u\u017cywaj\u0105c `useEffect` niech pierwszy rzuci kamieniem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858b0e458a.gif\" alt=\"\"\/><figcaption>Autor Frontend Thursday w momencie jego publikacji - koloryzowane<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858b0e458a.gif\" alt=\"\"\/><figcaption>Autor Frontend Thursday w momencie jego publikacji - koloryzowane<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><\/p>\n","innerContent":["\n<p><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W podlinkowanej poni\u017cej prezentacji z ostatniego Reactathon znajdziecie jeszcze wi\u0119cej podobnych przyk\u0142ad\u00f3w, a ponadto troch\u0119 wzorc\u00f3w, kt\u00f3re pozwol\u0105 Wam unika\u0107 nadmiarowych wywo\u0142a\u0144 `useEffect`. Zdecydowanie polecam!<\/p>\n","innerContent":["\n<p>W podlinkowanej poni\u017cej prezentacji z ostatniego Reactathon znajdziecie jeszcze wi\u0119cej podobnych przyk\u0142ad\u00f3w, a ponadto troch\u0119 wzorc\u00f3w, kt\u00f3re pozwol\u0105 Wam unika\u0107 nadmiarowych wywo\u0142a\u0144 `useEffect`. Zdecydowanie polecam!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=HPoC-k7Rxwo","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=HPoC-k7Rxwo\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=HPoC-k7Rxwo\n<\/div><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9959","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=9959"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9959\/revisions"}],"predecessor-version":[{"id":10485,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9959\/revisions\/10485"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/8134"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}