{"id":11254,"date":"2022-10-13T12:24:35","date_gmt":"2022-10-13T10:24:35","guid":{"rendered":"https:\/\/vived.io\/?p=11254"},"modified":"2022-10-13T12:24:38","modified_gmt":"2022-10-13T10:24:38","slug":"meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/","title":{"rendered":"Meta tworzy sw\u00f3j fork WebView dla Androida &#8211; Frontend Weekly vol. 108"},"content":{"rendered":"\n<h2 id=\"1-meta-stworzyla-swoja-implementacje-webview-dla-androida\" data-num=1>1. Meta stworzy\u0142a swoj\u0105 implementacj\u0119 WebView dla Androida<\/h2>\n\n\n\n<p>W <a href=\"https:\/\/vived.io\/bun-is-baked-very-quickly-frontend-weekly-vol-102\/\">102 edycji naszego przegl\u0105du<\/a> podrzucali\u015bmy Wam narz\u0119dzie <a href=\"https:\/\/inappbrowser.com\/\">inAppBrowser.com<\/a>, za pomoc\u0105 kt\u00f3rego sprawdza\u0107 mo\u017cna by\u0142o co \u015bledz\u0105 przegl\u0105darki wbudowane w poszczeg\u00f3lne aplikacje. Narz\u0119dzie to skupia\u0142o si\u0119 na systemie iOS, ale nie to jest tutaj wa\u017cne. <a href=\"https:\/\/krausefx.com\/blog\/announcing-inappbrowsercom-see-what-javascript-commands-get-executed-in-an-in-app-browser\">Z raportu przygotowanego przez autora narz\u0119dzia<\/a> wyczyta\u0107 mo\u017cemy na przyk\u0142ad, \u017ce TikTok \u015bledzi wszystkie interakcje z otwart\u0105 stron\u0105, a Instagram \u015bledzi wszystkie pola wej\u015bciowe w\u0142\u0105czaj\u0105c w to has\u0142a.<\/p>\n\n\n\n<p>W kontek\u015bcie tych informacji, troch\u0119 ci\u0119\u017cko uwierzy\u0107 mi w dobre intencje Mety tworz\u0105cej w\u0142asny fork WebView dla Androida. Jak wynika z danych zgromadzonych przez korporacj\u0119, spora grupa u\u017cytkownik\u00f3w regularnie aktualizuje aplikacj\u0119 Facebooka, ale bardzo rzadko aktualizuje WebView i Chrome. W przypadku takich u\u017cytkownik\u00f3w strony otwierane w aplikacji podatne s\u0105 na liczne luki bezpiecze\u0144stwa. Aby chroni\u0107 bezbronnych u\u017cytkownik\u00f3w Facebook zamierza do swojej aplikacji do\u0142\u0105cza\u0107 w\u0142asn\u0105 przegl\u0105dark\u0119 &#8211; zawsze aktualn\u0105 i zawsze bezpieczn\u0105.<\/p>\n\n\n\n<p>Poza bezpiecze\u0144stwem programi\u015bci Facebooka uwa\u017caj\u0105 r\u00f3wnie\u017c, \u017ce ich implementacja WebView b\u0119dzie odrobin\u0119 szybsza od tej dostarczanej systemowo. Wynika to z faktu, \u017ce Facebook zawsze wie jakich rozmiar\u00f3w b\u0119dzie otwierane okno przegl\u0105darki, co pozwala upro\u015bci\u0107 logik\u0119 inicjalizacji. W raporcie nie pojawiaj\u0105 si\u0119 jednak \u017cadne twarde dane, a argument ten zepchni\u0119ty jest raczej na drugi plan ca\u0142ego przedsi\u0119wzi\u0119cia.<\/p>\n\n\n\n<p>Na papierze intencje Mety wygl\u0105daj\u0105 dobre. Wszystko sprowadza si\u0119 jednak do zaufania. Fork WebView utworzony przez Met\u0119 jest i przynajmniej na razie pozostanie prywatny. Oznacza to, \u017ce korporacja bez wi\u0119kszych problem\u00f3w mo\u017ce modyfikowa\u0107 fragmenty Chromium jak i po cichu wstrzykiwa\u0107 w\u0142a\u015bciwie dowolny kod. Bezpieczn\u0105 opcja pozostaje wci\u0105\u017c jedna: otwiera\u0107 linki w zewn\u0119trznej, aktualnej przegl\u0105darce.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6wqd46.jpeg\" alt=\"\" class=\"wp-image-11255\" width=\"424\" height=\"424\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6wqd46.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6wqd46-300x300.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6wqd46-150x150.jpeg 150w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/engineering.fb.com\/2022\/09\/30\/android\/launching-a-new-chromium-based-webview-for-android\/\">https:\/\/engineering.fb.com\/2022\/09\/30\/android\/launching-a-new-chromium-based-webview-for-android\/<\/a><\/p>\n\n\n\n<h2 id=\"2-zx-7-1-0-maly-update-duze-nowosci\" data-num=2>2. zx 7.1.0 &#8211; ma\u0142y update, du\u017ce nowo\u015bci<\/h2>\n\n\n\n<p>zx to narz\u0119dzie rozwijane przez google, kt\u00f3re jest JavaScriptow\u0105 alternatyw\u0105 dla bashowych skrypt\u00f3w. Od starego i dobrze znanego Node.js odr\u00f3\u017cnia je przede wszystkim ca\u0142a masa drobnych usprawnie\u0144, kt\u00f3re znacz\u0105co odchudzaj\u0105 kod. Zobaczcie tylko na poni\u017cszy przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">#!\/usr\/bin\/env zx\n\nlet name = await $`cat package.json | grep name`\nlet branch = await $`git branch --show-current`\n\nawait $`echo Deploying package ${name} from branch ${branch}`\nawait $`dep deploy --branch=${branch}`\n\nawait Promise.all([\n  $`sleep 1; echo Progress 33%`,\n  $`sleep 2; echo Progress 66%`,\n  $`sleep 3; echo Progress 100%`,\n]);<\/code><\/pre>\n\n\n\n<p>Mo\u017cecie zastanawia\u0107 si\u0119 dlaczego po raz pierwszy od wydania zx 1.0 wracamy do niego w naszym przegl\u0105dzie. Od tego czasu ukaza\u0142o si\u0119 w ko\u0144cu a\u017c 6 wersji major i jeszcze wi\u0119cej wersji minor. Ot\u00f3\u017c zx 7.1.0 wprowadza funkcjonalno\u015b\u0107 automatycznej instalacji modu\u0142\u00f3w z npm! Wystarczy, \u017ce do komendy dodamy flag\u0119 `&#8211;install`, a reszta wydarzy si\u0119 sama. Dzi\u0119ki temu bez obaw i dodatkowej konfiguracji korzysta\u0107 mo\u017cemy z wszelakich utlis\u00f3w i helper\u00f3w.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-shell\">zx --install script.mjs<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import sh from &#039;tinysh@1.0.0&#039;;\nimport { kebabCase } from \u2018lodash@4.17.21\u2019;\n\nlet name = await $`cat package.json | grep name`\nsh.say(&#039;Package name in kebab case is ${kebabCase(name)}&#039;)<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-30.jpeg\" alt=\"\" class=\"wp-image-11257\" width=\"398\" height=\"551\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-30.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-30-217x300.jpeg 217w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/google\/zx\">https:\/\/github.com\/google\/zx<\/a><\/p>\n\n\n\n<h2 id=\"3-nowy-hook-useevent-wraca-na-lawke-rezerwowych\" data-num=3>3. Nowy hook useEvent wraca na \u0142awk\u0119 rezerwowych<\/h2>\n\n\n\n<p>W maju \u015bwie\u017co po wydaniu React 18 na GitHubie pojawi\u0142o si\u0119 obiecuj\u0105ce RFC, kt\u00f3re szerokim echem roznios\u0142o si\u0119 w\u015br\u00f3d spo\u0142eczno\u015bci. Nowy hook mia\u0142 nazywa\u0107 si\u0119 `useEvent` i zwraca\u0107 funkcj\u0119 o sta\u0142ej referencji. We wn\u0119trzu hooka stan zawsze mia\u0142 odpowiada\u0107 aktualnemu stanowi komponentu. Jak mo\u017cecie si\u0119 domy\u015bla\u0107, zachowanie to mia\u0142o skutecznie minimalizowa\u0107 zb\u0119dne rendery, na przyk\u0142ad dla funkcji nas\u0142uchuj\u0105cych na klikni\u0119cie przycisku.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">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}\n\nfunction 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 pomimo pocz\u0105tkowego optymizmu, `useEvent` nie trafi jednak do Reacta. Jak raportuje Dan Abramov (ten sam, kt\u00f3ry w 2018 zaprezentowa\u0142 \u015bwiatu hooki), API w obecnej postaci boryka si\u0119 z kilkoma problemami.<\/p>\n\n\n\n<p>Po pierwsze w obecnej postaci u\u017cytkownicy mog\u0105 zinterpretowa\u0107 nowy hook jako lepsz\u0105 wersj\u0119 `useCallback`. Co za tym idzie pojawi\u0107 mo\u017ce si\u0119 ch\u0119\u0107, aby po prostu pozby\u0107 si\u0119 go ze swojego kodu. Oba hooki maj\u0105 jednak inn\u0105 rol\u0119, dla obu jest miejsce w React i ich zastosowanie powinno by\u0107 jasne dla u\u017cytkownik\u00f3w.<\/p>\n\n\n\n<p>Po drugie, r\u00f3wnolegle do useEvent rozwijany jest kompilator, kt\u00f3ry umo\u017cliwia automatyczn\u0105 memonizacj\u0119 (wi\u0119cej o nim mo\u017cecie dowiedzie\u0107 si\u0119 z <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\">tej prezentacji na React Conf 2021<\/a>), Oba RFC pr\u00f3buj\u0105 adresowa\u0107 podobne problemy, dlatego r\u00f3wnoleg\u0142a praca nad nimi okaza\u0142a si\u0119 zbyt uci\u0105\u017cliwa.<\/p>\n\n\n\n<p>Na szcz\u0119\u015bcie fakt, \u017ce prace nad RFC useEvent zosta\u0142y zatrzymane, nie oznacza, \u017ce problemy, kt\u00f3re pr\u00f3bowa\u0142 rozwi\u0105za\u0107 nigdy nie zostan\u0105 zaadresowane. Jak twierdz\u0105 autorzy RFC, jego alternatywa jest ju\u017c w przygotowaniu i za kilka tygodni lub miesi\u0119cy powinna ona ujrze\u0107 \u015bwiat\u0142o dzienne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/reactjs\/rfcs\/pull\/220#issuecomment-1259938816\">https:\/\/github.com\/reactjs\/rfcs\/pull\/220#issuecomment-1259938816<\/a><\/p>\n\n\n\n<h2 id=\"4-po-8-latach-wreszcie-doczekalismy-sie-axios-1-0\" data-num=4>4. Po 8 latach wreszcie doczekali\u015bmy si\u0119 axios 1.0<\/h2>\n\n\n\n<p>Axios to jedna z najpopularniejszych klient\u00f3w HTTP zar\u00f3wno dla przegl\u0105darek jak i Node.js. Pomimo, \u017ce czasy kiedy korzysta\u0107 musieli\u015bmy z `XMLHttpRequest` mamy ju\u017c dawno za sob\u0105, a du\u017co przyst\u0119pniejsze Fetch API wspierane jest przez wszystkie znacz\u0105ce \u015brodowiska, popularno\u015b\u0107 biblioteki nie maleje. Na GitHubie zgromadzi\u0142a ona ju\u017c prawie 100 tysi\u0119cy gwiazdek, a tylko w ostatnim tygodniu z npm pobran\u0105 j\u0105 ponad 32 miliony razy. A\u017c ci\u0119\u017ako uwierzy\u0107, \u017ce tak popularna biblioteka dopiero teraz doczeka\u0142\u0105 si\u0119 stabilnego API i wersji 1.0.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"676\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-31.jpeg\" alt=\"\" class=\"wp-image-11259\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-31.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-31-222x300.jpeg 222w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Je\u015bli zastanawiacie si\u0119, co nowego wprowadza axios 1.0 to ju\u017c \u015bpiesz\u0119 z odpowiedzi\u0105 &#8211; niewiele. Nowo\u015bci to przede wszystkim usprawnienia w systemie typowania i gar\u015b\u0107 bugfix\u00f3w i kilka drobnych zmian w API. Zreszt\u0105 niczego innego oczekiwa\u0107 nie mo\u017cna po bibliotece, kt\u00f3ra sp\u0119dzi\u0142a ca\u0142e 8 lat w wersji beta.<\/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\/10\/giphy-5.gif\" alt=\"\" class=\"wp-image-11261\"\/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/axios\/axios\/blob\/v1.x\/CHANGELOG.md\">https:\/\/github.com\/axios\/axios\/blob\/v1.x\/CHANGELOG.md<\/a><\/p>\n\n\n\n<h2 id=\"5-typescript-ma-juz-10-lat\" data-num=5>5. TypeScript ma ju\u017c 10 lat!<\/h2>\n\n\n\n<p>Jest kwiecie\u0144 2012 roku. Barack Obama w\u0142a\u015bnie po raz drugi wygra\u0142 wybory prezydenckie w Stanach Zjednoczonych, na ekranach kin pojawiaj\u0105 si\u0119 pierwsi Avengers, a Polacy z wielkimi nadziejami wyczekuj\u0105 nadchodz\u0105cego Euro 2012. W tym samym czasie Microsoft prezentuje zupe\u0142nie nowy j\u0119zyk, b\u0119d\u0105cy rozszerzeniem JavaScript o typy podobne do tych znanych z Javy czy C#.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/thecakeisalie.jpeg\" alt=\"\" class=\"wp-image-11263\" width=\"661\" height=\"372\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/thecakeisalie.jpeg 960w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/thecakeisalie-300x169.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/thecakeisalie-768x432.jpeg 768w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><figcaption>\u015awi\u0119tuj\u0105c urodziny TypeScript pami\u0119tajcie, ciastko nie jest prawdziwe<\/figcaption><\/figure><\/div>\n\n\n<p>Z dzisiejszej perspektywy mo\u017ce wydawa\u0107 si\u0119, \u017ce TypeScript od pocz\u0105tku skazany by\u0142 na sukces. W rzeczywisto\u015bci, w 2012 roku nie by\u0142o to takie pewne. Spora cz\u0119\u015b\u0107 JavaScriptowej spo\u0142eczno\u015bci przez lata przyzwyczajona do pe\u0142nej swobody odrzuca\u0142a zalety jakie wnosi\u0142 TypeScript. Do tego po drugiej strony barykady Google pr\u00f3bowa\u0142 promowa\u0107 swoj\u0105 alternatyw\u0119 w postaci Darta, a kilka lat p\u00f3\u017aniej Facebook wyjdzie ze swoj\u0105 alternatyw\u0105 w postaci Flow.<\/p>\n\n\n\n<p>Po 10 latach coraz ci\u0119\u017cej znale\u017a\u0107 ju\u017c krytyk\u00f3w TypeScript. Bez wahania mo\u017cna powiedzie\u0107, \u017ce j\u0119zyk przebi\u0142 si\u0119 do mainstreamu. Od 2019 roku znajduje si\u0119 on <a href=\"https:\/\/insights.stackoverflow.com\/survey\/2019#technology-_-programming-scripting-and-markup-languages\">w top 10 najpopularniejszych j\u0119zyk\u00f3w programowania<\/a> wed\u0142ug Stackoverflow Survey, a w ostatniej edycji <a href=\"https:\/\/survey.stackoverflow.co\/2022\/#technology-most-popular-technologies\">uplasowa\u0142 si\u0119 a\u017c na 5 miejscu<\/a>. O jego wp\u0142ywie na spo\u0142eczno\u015b\u0107 JavaScript najlepiej \u015bwiadczy fakt, \u017ce w ankiecie State of JS statyczne typowanie od 2020 roku wybierane jest <a href=\"https:\/\/2020.stateofjs.com\/en-US\/opinions\/#missing_from_js\">najbardziej po\u017c\u0105dan\u0105 funkcjonalno\u015bci\u0105 JavaScript<\/a>. Spo\u0142eczno\u015b\u0107 by\u0142a w tej kwestii na tyle wokalna, \u017ce Microsoft przygotowa\u0142 i obj\u0105\u0142 swoim patronatem <a href=\"https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/\">odpowiednie RFC<\/a>, kt\u00f3ra wprowadza typowanie do standardu JavaScript (na razie utkwi\u0142o ono w Stage 1, wi\u0119c zanim trafi ono do standardu przyjdzie nam jeszcze troch\u0119 poczeka\u0107).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"581\" height=\"430\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-33.jpeg\" alt=\"\" class=\"wp-image-11265\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-33.jpeg 581w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-33-300x222.jpeg 300w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/figure><\/div>\n\n\n<p>Na zako\u0144czenie tej nostalgicznej podr\u00f3\u017cy do przysz\u0142o\u015bci ma\u0142a ciekawostka. Czy wiecie, \u017ce Google podczas prac na Angular 2 rozwija\u0142 r\u00f3wnolegle wersj\u0119 w TypeScript jak i Dart? A czy wiecie, \u017ce ze wzgl\u0119du na brak wsparcia dla dekorator\u00f3w w standardzie TypeScript Google chcia\u0142 rozwija\u0107 i utrzymywa\u0107 w\u0142asny fork TypeScript? Na szcz\u0119\u015bcie obie korporacje ostatecznie dosz\u0142y do porozumienia. Kto wie czy TypeScript by\u0142by tu gdzie jest teraz, gdyby ju\u017c na pocz\u0105tku jego historii dosz\u0142o do podzia\u0142u spo\u0142eczno\u015bci.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"562\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-32.jpeg\" alt=\"\" class=\"wp-image-11267\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-32.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-32-267x300.jpeg 267w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/devblogs.microsoft.com\/typescript\/ten-years-of-typescript\/\">https:\/\/devblogs.microsoft.com\/typescript\/ten-years-of-typescript\/<\/a><\/p>\n\n\n\n<h2 id=\"bonus-1-state-of-css-survey-2022\" data-num=6>Bonus #1: State of CSS Survey 2022<\/h2>\n\n\n\n<p>Ruszy\u0142a ankieta State of CSS 2022 i link do niej znajdziecie w \u017ar\u00f3d\u0142ach poni\u017cej. Jak co roku, ka\u017cdemu gor\u0105co polecam po\u015bwi\u0119ci\u0107 jej kilka minut. Nawet je\u015bli nie dlatego, \u017ceby wspom\u00f3c spo\u0142eczno\u015b\u0107, to dlatego, \u017ce jest to \u015bwietne \u017ar\u00f3d\u0142o, z kt\u00f3rego dowiecie si\u0119 jakie nowe funkcjonalno\u015bci omin\u0119\u0142y Was w ostatnich latach. Na ko\u0144cu ankiety otrzymacie zar\u00f3wno procentowe podsumowanie Waszej wiedzy w poszczeg\u00f3lnych obszarach jak i zestaw link\u00f3w, dzi\u0119ki kt\u00f3rym szybko nadrobicie braki.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"270\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/giphy-6.gif\" alt=\"\" class=\"wp-image-11269\"\/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/survey.devographics.com\/survey\/state-of-css\/2022\">https:\/\/survey.devographics.com\/survey\/state-of-css\/2022<\/a><\/p>\n\n\n\n<h2 id=\"bonus-2-wybrano-skladnie-zagniezdzonych-css-ow\" data-num=7>Bonus #2: Wybrano sk\u0142adni\u0119 zagnie\u017cd\u017conych CSS-\u00f3w<\/h2>\n\n\n\n<p>W lipcu tego roku, <a href=\"https:\/\/developer.chrome.com\/blog\/help-css-nesting\/\">Google poprosi\u0142 spo\u0142eczno\u015b\u0107 o opini\u0119 na temat mo\u017cliwych sk\u0142adni zagnie\u017cd\u017conych CSS-\u00f3w.<\/a> W tym tygodniu korporacja z Mountain View podzieli\u0142a si\u0119 ze \u015bwiatem wynikami. Z mia\u017cd\u017c\u0105c\u0105 przewag\u0105 wygra\u0142a sk\u0142adnia `@nest`.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">.foo {\n  color: #111;\n\n  &amp; .bar {\n    color: #eee;\n  }\n}<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/8u6XZo3MyDuMmrUnx8UA.jpg\" alt=\"\" class=\"wp-image-11271\" width=\"697\" height=\"452\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/8u6XZo3MyDuMmrUnx8UA.jpg 845w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/8u6XZo3MyDuMmrUnx8UA-300x195.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/8u6XZo3MyDuMmrUnx8UA-768x498.jpg 768w\" sizes=\"auto, (max-width: 697px) 100vw, 697px\" \/><\/figure><\/div>\n\n\n<p>Niestety wyniki ankiety nie przek\u0142adaj\u0105 si\u0119 bezpo\u015brednio na standard CSS. Google zapowiada jednak, \u017ce b\u0119dzie ci\u0119\u017cko pracowa\u0107 wraz z CSS Working Group, aby proponowana sk\u0142adnia jak najszybciej trafi\u0142a do standardu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<p><a href=\"https:\/\/developer.chrome.com\/en\/blog\/help-css-nesting-results\/\">https:\/\/developer.chrome.com\/en\/blog\/help-css-nesting-results\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Facebook og\u0142osi\u0142, \u017ce w swojej Androidowej aplikacji zamierza zmieni\u0107 systemowe WebView swoj\u0105 w\u0142asn\u0105 implementacj\u0105. Jak zwykle wyt\u0142umaczeniem jest bezpiecze\u0144stwo i wygoda u\u017cytkownika. Pytanie tylko, czy ca\u0142a sprawa nie ma przypadkiem drugiego dna.<\/p>\n","protected":false},"author":12,"featured_media":11273,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[670,275,389,364,669],"class_list":["post-11254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl","tag-axios","tag-css-pl","tag-react-pl","tag-typescript-pl","tag-zx"],"acf":{"feature_image_visible":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png","feature_image_blog":{"ID":11275,"id":11275,"title":"fall-autumn-red-season-min","filename":"fall-autumn-red-season-min.jpeg","filesize":301874,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min.jpeg","link":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/fall-autumn-red-season-min\/","alt":"","author":"12","description":"","caption":"","name":"fall-autumn-red-season-min","status":"inherit","uploaded_to":11254,"date":"2022-10-13 10:00:25","modified":"2022-10-13 10:00:25","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1125,"height":750,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min-300x200.jpeg","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min-768x512.jpeg","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min-1024x683.jpeg","large-width":1024,"large-height":683,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min.jpeg","1536x1536-width":1125,"1536x1536-height":750,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min.jpeg","2048x2048-width":1125,"2048x2048-height":750,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/fall-autumn-red-season-min.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"estimated_reading_time":"7"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Meta tworzy sw\u00f3j fork WebView dla Androida - Frontend Weekly vol. 108 - 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\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Meta tworzy sw\u00f3j fork WebView dla Androida - Frontend Weekly vol. 108 - Vived\" \/>\n<meta property=\"og:description\" content=\"Facebook og\u0142osi\u0142, \u017ce w swojej Androidowej aplikacji zamierza zmieni\u0107 systemowe WebView swoj\u0105 w\u0142asn\u0105 implementacj\u0105. Jak zwykle wyt\u0142umaczeniem jest bezpiecze\u0144stwo i wygoda u\u017cytkownika. Pytanie tylko, czy ca\u0142a sprawa nie ma przypadkiem drugiego dna.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-13T10:24:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-13T10:24:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.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\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Meta tworzy sw\u00f3j fork WebView dla Androida &#8211; Frontend Weekly vol. 108\",\"datePublished\":\"2022-10-13T10:24:35+00:00\",\"dateModified\":\"2022-10-13T10:24:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/\"},\"wordCount\":1481,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png\",\"keywords\":[\"axios\",\"CSS\",\"react\",\"typescript\",\"zx\"],\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/\",\"url\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/\",\"name\":\"Meta tworzy sw\u00f3j fork WebView dla Androida - Frontend Weekly vol. 108 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png\",\"datePublished\":\"2022-10-13T10:24:35+00:00\",\"dateModified\":\"2022-10-13T10:24:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Meta tworzy sw\u00f3j fork WebView dla Androida &#8211; Frontend Weekly vol. 108\"}]},{\"@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":"Meta tworzy sw\u00f3j fork WebView dla Androida - Frontend Weekly vol. 108 - 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\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/","og_locale":"pl_PL","og_type":"article","og_title":"Meta tworzy sw\u00f3j fork WebView dla Androida - Frontend Weekly vol. 108 - Vived","og_description":"Facebook og\u0142osi\u0142, \u017ce w swojej Androidowej aplikacji zamierza zmieni\u0107 systemowe WebView swoj\u0105 w\u0142asn\u0105 implementacj\u0105. Jak zwykle wyt\u0142umaczeniem jest bezpiecze\u0144stwo i wygoda u\u017cytkownika. Pytanie tylko, czy ca\u0142a sprawa nie ma przypadkiem drugiego dna.","og_url":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/","og_site_name":"Vived","article_published_time":"2022-10-13T10:24:35+00:00","article_modified_time":"2022-10-13T10:24:38+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.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\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Meta tworzy sw\u00f3j fork WebView dla Androida &#8211; Frontend Weekly vol. 108","datePublished":"2022-10-13T10:24:35+00:00","dateModified":"2022-10-13T10:24:38+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/"},"wordCount":1481,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png","keywords":["axios","CSS","react","typescript","zx"],"articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/","url":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/","name":"Meta tworzy sw\u00f3j fork WebView dla Androida - Frontend Weekly vol. 108 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png","datePublished":"2022-10-13T10:24:35+00:00","dateModified":"2022-10-13T10:24:38+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/meta-tworzy-swoj-fork-webview-dla-androida-frontend-weekly-vol-108\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Meta tworzy sw\u00f3j fork WebView dla Androida &#8211; Frontend Weekly vol. 108"}]},{"@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. Meta stworzy\u0142a swoj\u0105 implementacj\u0119 WebView dla Androida<\/h2>\n","innerContent":["\n<h2>1. Meta stworzy\u0142a swoj\u0105 implementacj\u0119 WebView dla Androida<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W <a href=\"https:\/\/vived.io\/bun-is-baked-very-quickly-frontend-weekly-vol-102\/\">102 edycji naszego przegl\u0105du<\/a> podrzucali\u015bmy Wam narz\u0119dzie <a href=\"https:\/\/inappbrowser.com\/\">inAppBrowser.com<\/a>, za pomoc\u0105 kt\u00f3rego sprawdza\u0107 mo\u017cna by\u0142o co \u015bledz\u0105 przegl\u0105darki wbudowane w poszczeg\u00f3lne aplikacje. Narz\u0119dzie to skupia\u0142o si\u0119 na systemie iOS, ale nie to jest tutaj wa\u017cne. <a href=\"https:\/\/krausefx.com\/blog\/announcing-inappbrowsercom-see-what-javascript-commands-get-executed-in-an-in-app-browser\">Z raportu przygotowanego przez autora narz\u0119dzia<\/a> wyczyta\u0107 mo\u017cemy na przyk\u0142ad, \u017ce TikTok \u015bledzi wszystkie interakcje z otwart\u0105 stron\u0105, a Instagram \u015bledzi wszystkie pola wej\u015bciowe w\u0142\u0105czaj\u0105c w to has\u0142a.<\/p>\n","innerContent":["\n<p>W <a href=\"https:\/\/vived.io\/bun-is-baked-very-quickly-frontend-weekly-vol-102\/\">102 edycji naszego przegl\u0105du<\/a> podrzucali\u015bmy Wam narz\u0119dzie <a href=\"https:\/\/inappbrowser.com\/\">inAppBrowser.com<\/a>, za pomoc\u0105 kt\u00f3rego sprawdza\u0107 mo\u017cna by\u0142o co \u015bledz\u0105 przegl\u0105darki wbudowane w poszczeg\u00f3lne aplikacje. Narz\u0119dzie to skupia\u0142o si\u0119 na systemie iOS, ale nie to jest tutaj wa\u017cne. <a href=\"https:\/\/krausefx.com\/blog\/announcing-inappbrowsercom-see-what-javascript-commands-get-executed-in-an-in-app-browser\">Z raportu przygotowanego przez autora narz\u0119dzia<\/a> wyczyta\u0107 mo\u017cemy na przyk\u0142ad, \u017ce TikTok \u015bledzi wszystkie interakcje z otwart\u0105 stron\u0105, a Instagram \u015bledzi wszystkie pola wej\u015bciowe w\u0142\u0105czaj\u0105c w to has\u0142a.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W kontek\u015bcie tych informacji, troch\u0119 ci\u0119\u017cko uwierzy\u0107 mi w dobre intencje Mety tworz\u0105cej w\u0142asny fork WebView dla Androida. Jak wynika z danych zgromadzonych przez korporacj\u0119, spora grupa u\u017cytkownik\u00f3w regularnie aktualizuje aplikacj\u0119 Facebooka, ale bardzo rzadko aktualizuje WebView i Chrome. W przypadku takich u\u017cytkownik\u00f3w strony otwierane w aplikacji podatne s\u0105 na liczne luki bezpiecze\u0144stwa. Aby chroni\u0107 bezbronnych u\u017cytkownik\u00f3w Facebook zamierza do swojej aplikacji do\u0142\u0105cza\u0107 w\u0142asn\u0105 przegl\u0105dark\u0119 - zawsze aktualn\u0105 i zawsze bezpieczn\u0105.<\/p>\n","innerContent":["\n<p>W kontek\u015bcie tych informacji, troch\u0119 ci\u0119\u017cko uwierzy\u0107 mi w dobre intencje Mety tworz\u0105cej w\u0142asny fork WebView dla Androida. Jak wynika z danych zgromadzonych przez korporacj\u0119, spora grupa u\u017cytkownik\u00f3w regularnie aktualizuje aplikacj\u0119 Facebooka, ale bardzo rzadko aktualizuje WebView i Chrome. W przypadku takich u\u017cytkownik\u00f3w strony otwierane w aplikacji podatne s\u0105 na liczne luki bezpiecze\u0144stwa. Aby chroni\u0107 bezbronnych u\u017cytkownik\u00f3w Facebook zamierza do swojej aplikacji do\u0142\u0105cza\u0107 w\u0142asn\u0105 przegl\u0105dark\u0119 - zawsze aktualn\u0105 i zawsze bezpieczn\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poza bezpiecze\u0144stwem programi\u015bci Facebooka uwa\u017caj\u0105 r\u00f3wnie\u017c, \u017ce ich implementacja WebView b\u0119dzie odrobin\u0119 szybsza od tej dostarczanej systemowo. Wynika to z faktu, \u017ce Facebook zawsze wie jakich rozmiar\u00f3w b\u0119dzie otwierane okno przegl\u0105darki, co pozwala upro\u015bci\u0107 logik\u0119 inicjalizacji. W raporcie nie pojawiaj\u0105 si\u0119 jednak \u017cadne twarde dane, a argument ten zepchni\u0119ty jest raczej na drugi plan ca\u0142ego przedsi\u0119wzi\u0119cia.<\/p>\n","innerContent":["\n<p>Poza bezpiecze\u0144stwem programi\u015bci Facebooka uwa\u017caj\u0105 r\u00f3wnie\u017c, \u017ce ich implementacja WebView b\u0119dzie odrobin\u0119 szybsza od tej dostarczanej systemowo. Wynika to z faktu, \u017ce Facebook zawsze wie jakich rozmiar\u00f3w b\u0119dzie otwierane okno przegl\u0105darki, co pozwala upro\u015bci\u0107 logik\u0119 inicjalizacji. W raporcie nie pojawiaj\u0105 si\u0119 jednak \u017cadne twarde dane, a argument ten zepchni\u0119ty jest raczej na drugi plan ca\u0142ego przedsi\u0119wzi\u0119cia.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na papierze intencje Mety wygl\u0105daj\u0105 dobre. Wszystko sprowadza si\u0119 jednak do zaufania. Fork WebView utworzony przez Met\u0119 jest i przynajmniej na razie pozostanie prywatny. Oznacza to, \u017ce korporacja bez wi\u0119kszych problem\u00f3w mo\u017ce modyfikowa\u0107 fragmenty Chromium jak i po cichu wstrzykiwa\u0107 w\u0142a\u015bciwie dowolny kod. Bezpieczn\u0105 opcja pozostaje wci\u0105\u017c jedna: otwiera\u0107 linki w zewn\u0119trznej, aktualnej przegl\u0105darce.<\/p>\n","innerContent":["\n<p>Na papierze intencje Mety wygl\u0105daj\u0105 dobre. Wszystko sprowadza si\u0119 jednak do zaufania. Fork WebView utworzony przez Met\u0119 jest i przynajmniej na razie pozostanie prywatny. Oznacza to, \u017ce korporacja bez wi\u0119kszych problem\u00f3w mo\u017ce modyfikowa\u0107 fragmenty Chromium jak i po cichu wstrzykiwa\u0107 w\u0142a\u015bciwie dowolny kod. Bezpieczn\u0105 opcja pozostaje wci\u0105\u017c jedna: otwiera\u0107 linki w zewn\u0119trznej, aktualnej przegl\u0105darce.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11255,"width":424,"height":424,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6wqd46.jpeg\" alt=\"\" class=\"wp-image-11255\" width=\"424\" height=\"424\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6wqd46.jpeg\" alt=\"\" class=\"wp-image-11255\" width=\"424\" height=\"424\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/engineering.fb.com\/2022\/09\/30\/android\/launching-a-new-chromium-based-webview-for-android\/\">https:\/\/engineering.fb.com\/2022\/09\/30\/android\/launching-a-new-chromium-based-webview-for-android\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/engineering.fb.com\/2022\/09\/30\/android\/launching-a-new-chromium-based-webview-for-android\/\">https:\/\/engineering.fb.com\/2022\/09\/30\/android\/launching-a-new-chromium-based-webview-for-android\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. zx 7.1.0 - ma\u0142y update, du\u017ce nowo\u015bci<\/h2>\n","innerContent":["\n<h2>2. zx 7.1.0 - ma\u0142y update, du\u017ce nowo\u015bci<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>zx to narz\u0119dzie rozwijane przez google, kt\u00f3re jest JavaScriptow\u0105 alternatyw\u0105 dla bashowych skrypt\u00f3w. Od starego i dobrze znanego Node.js odr\u00f3\u017cnia je przede wszystkim ca\u0142a masa drobnych usprawnie\u0144, kt\u00f3re znacz\u0105co odchudzaj\u0105 kod. Zobaczcie tylko na poni\u017cszy przyk\u0142ad:<\/p>\n","innerContent":["\n<p>zx to narz\u0119dzie rozwijane przez google, kt\u00f3re jest JavaScriptow\u0105 alternatyw\u0105 dla bashowych skrypt\u00f3w. Od starego i dobrze znanego Node.js odr\u00f3\u017cnia je przede wszystkim ca\u0142a masa drobnych usprawnie\u0144, kt\u00f3re znacz\u0105co odchudzaj\u0105 kod. Zobaczcie tylko na poni\u017cszy przyk\u0142ad:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">#!\/usr\/bin\/env zx\n\nlet name = await $`cat package.json | grep name`\nlet branch = await $`git branch --show-current`\n\nawait $`echo Deploying package ${name} from branch ${branch}`\nawait $`dep deploy --branch=${branch}`\n\nawait Promise.all([\n  $`sleep 1; echo Progress 33%`,\n  $`sleep 2; echo Progress 66%`,\n  $`sleep 3; echo Progress 100%`,\n]);<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">#!\/usr\/bin\/env zx\n\nlet name = await $`cat package.json | grep name`\nlet branch = await $`git branch --show-current`\n\nawait $`echo Deploying package ${name} from branch ${branch}`\nawait $`dep deploy --branch=${branch}`\n\nawait Promise.all([\n  $`sleep 1; echo Progress 33%`,\n  $`sleep 2; echo Progress 66%`,\n  $`sleep 3; echo Progress 100%`,\n]);<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mo\u017cecie zastanawia\u0107 si\u0119 dlaczego po raz pierwszy od wydania zx 1.0 wracamy do niego w naszym przegl\u0105dzie. Od tego czasu ukaza\u0142o si\u0119 w ko\u0144cu a\u017c 6 wersji major i jeszcze wi\u0119cej wersji minor. Ot\u00f3\u017c zx 7.1.0 wprowadza funkcjonalno\u015b\u0107 automatycznej instalacji modu\u0142\u00f3w z npm! Wystarczy, \u017ce do komendy dodamy flag\u0119 `--install`, a reszta wydarzy si\u0119 sama. Dzi\u0119ki temu bez obaw i dodatkowej konfiguracji korzysta\u0107 mo\u017cemy z wszelakich utlis\u00f3w i helper\u00f3w.<\/p>\n","innerContent":["\n<p>Mo\u017cecie zastanawia\u0107 si\u0119 dlaczego po raz pierwszy od wydania zx 1.0 wracamy do niego w naszym przegl\u0105dzie. Od tego czasu ukaza\u0142o si\u0119 w ko\u0144cu a\u017c 6 wersji major i jeszcze wi\u0119cej wersji minor. Ot\u00f3\u017c zx 7.1.0 wprowadza funkcjonalno\u015b\u0107 automatycznej instalacji modu\u0142\u00f3w z npm! Wystarczy, \u017ce do komendy dodamy flag\u0119 `--install`, a reszta wydarzy si\u0119 sama. Dzi\u0119ki temu bez obaw i dodatkowej konfiguracji korzysta\u0107 mo\u017cemy z wszelakich utlis\u00f3w i helper\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"shell"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-shell\">zx --install script.mjs<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-shell\">zx --install script.mjs<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import sh from 'tinysh@1.0.0';\nimport { kebabCase } from \u2018lodash@4.17.21\u2019;\n\nlet name = await $`cat package.json | grep name`\nsh.say('Package name in kebab case is ${kebabCase(name)}')<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import sh from 'tinysh@1.0.0';\nimport { kebabCase } from \u2018lodash@4.17.21\u2019;\n\nlet name = await $`cat package.json | grep name`\nsh.say('Package name in kebab case is ${kebabCase(name)}')<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11257,"width":398,"height":551,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-30.jpeg\" alt=\"\" class=\"wp-image-11257\" width=\"398\" height=\"551\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-30.jpeg\" alt=\"\" class=\"wp-image-11257\" width=\"398\" height=\"551\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/google\/zx\">https:\/\/github.com\/google\/zx<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/google\/zx\">https:\/\/github.com\/google\/zx<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Nowy hook useEvent wraca na \u0142awk\u0119 rezerwowych<\/h2>\n","innerContent":["\n<h2>3. Nowy hook useEvent wraca na \u0142awk\u0119 rezerwowych<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W maju \u015bwie\u017co po wydaniu React 18 na GitHubie pojawi\u0142o si\u0119 obiecuj\u0105ce RFC, kt\u00f3re szerokim echem roznios\u0142o si\u0119 w\u015br\u00f3d spo\u0142eczno\u015bci. Nowy hook mia\u0142 nazywa\u0107 si\u0119 `useEvent` i zwraca\u0107 funkcj\u0119 o sta\u0142ej referencji. We wn\u0119trzu hooka stan zawsze mia\u0142 odpowiada\u0107 aktualnemu stanowi komponentu. Jak mo\u017cecie si\u0119 domy\u015bla\u0107, zachowanie to mia\u0142o skutecznie minimalizowa\u0107 zb\u0119dne rendery, na przyk\u0142ad dla funkcji nas\u0142uchuj\u0105cych na klikni\u0119cie przycisku.<\/p>\n","innerContent":["\n<p>W maju \u015bwie\u017co po wydaniu React 18 na GitHubie pojawi\u0142o si\u0119 obiecuj\u0105ce RFC, kt\u00f3re szerokim echem roznios\u0142o si\u0119 w\u015br\u00f3d spo\u0142eczno\u015bci. Nowy hook mia\u0142 nazywa\u0107 si\u0119 `useEvent` i zwraca\u0107 funkcj\u0119 o sta\u0142ej referencji. We wn\u0119trzu hooka stan zawsze mia\u0142 odpowiada\u0107 aktualnemu stanowi komponentu. Jak mo\u017cecie si\u0119 domy\u015bla\u0107, zachowanie to mia\u0142o skutecznie minimalizowa\u0107 zb\u0119dne rendery, na przyk\u0142ad dla funkcji nas\u0142uchuj\u0105cych na klikni\u0119cie przycisku.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">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}\n\nfunction 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-javascript\">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}\n\nfunction 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 pomimo pocz\u0105tkowego optymizmu, `useEvent` nie trafi jednak do Reacta. Jak raportuje Dan Abramov (ten sam, kt\u00f3ry w 2018 zaprezentowa\u0142 \u015bwiatu hooki), API w obecnej postaci boryka si\u0119 z kilkoma problemami.<\/p>\n","innerContent":["\n<p>Niestety pomimo pocz\u0105tkowego optymizmu, `useEvent` nie trafi jednak do Reacta. Jak raportuje Dan Abramov (ten sam, kt\u00f3ry w 2018 zaprezentowa\u0142 \u015bwiatu hooki), API w obecnej postaci boryka si\u0119 z kilkoma problemami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po pierwsze w obecnej postaci u\u017cytkownicy mog\u0105 zinterpretowa\u0107 nowy hook jako lepsz\u0105 wersj\u0119 `useCallback`. Co za tym idzie pojawi\u0107 mo\u017ce si\u0119 ch\u0119\u0107, aby po prostu pozby\u0107 si\u0119 go ze swojego kodu. Oba hooki maj\u0105 jednak inn\u0105 rol\u0119, dla obu jest miejsce w React i ich zastosowanie powinno by\u0107 jasne dla u\u017cytkownik\u00f3w.<\/p>\n","innerContent":["\n<p>Po pierwsze w obecnej postaci u\u017cytkownicy mog\u0105 zinterpretowa\u0107 nowy hook jako lepsz\u0105 wersj\u0119 `useCallback`. Co za tym idzie pojawi\u0107 mo\u017ce si\u0119 ch\u0119\u0107, aby po prostu pozby\u0107 si\u0119 go ze swojego kodu. Oba hooki maj\u0105 jednak inn\u0105 rol\u0119, dla obu jest miejsce w React i ich zastosowanie powinno by\u0107 jasne dla u\u017cytkownik\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po drugie, r\u00f3wnolegle do useEvent rozwijany jest kompilator, kt\u00f3ry umo\u017cliwia automatyczn\u0105 memonizacj\u0119 (wi\u0119cej o nim mo\u017cecie dowiedzie\u0107 si\u0119 z <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\">tej prezentacji na React Conf 2021<\/a>), Oba RFC pr\u00f3buj\u0105 adresowa\u0107 podobne problemy, dlatego r\u00f3wnoleg\u0142a praca nad nimi okaza\u0142a si\u0119 zbyt uci\u0105\u017cliwa.<\/p>\n","innerContent":["\n<p>Po drugie, r\u00f3wnolegle do useEvent rozwijany jest kompilator, kt\u00f3ry umo\u017cliwia automatyczn\u0105 memonizacj\u0119 (wi\u0119cej o nim mo\u017cecie dowiedzie\u0107 si\u0119 z <a href=\"https:\/\/www.youtube.com\/watch?v=lGEMwh32soc\">tej prezentacji na React Conf 2021<\/a>), Oba RFC pr\u00f3buj\u0105 adresowa\u0107 podobne problemy, dlatego r\u00f3wnoleg\u0142a praca nad nimi okaza\u0142a si\u0119 zbyt uci\u0105\u017cliwa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na szcz\u0119\u015bcie fakt, \u017ce prace nad RFC useEvent zosta\u0142y zatrzymane, nie oznacza, \u017ce problemy, kt\u00f3re pr\u00f3bowa\u0142 rozwi\u0105za\u0107 nigdy nie zostan\u0105 zaadresowane. Jak twierdz\u0105 autorzy RFC, jego alternatywa jest ju\u017c w przygotowaniu i za kilka tygodni lub miesi\u0119cy powinna ona ujrze\u0107 \u015bwiat\u0142o dzienne.<\/p>\n","innerContent":["\n<p>Na szcz\u0119\u015bcie fakt, \u017ce prace nad RFC useEvent zosta\u0142y zatrzymane, nie oznacza, \u017ce problemy, kt\u00f3re pr\u00f3bowa\u0142 rozwi\u0105za\u0107 nigdy nie zostan\u0105 zaadresowane. Jak twierdz\u0105 autorzy RFC, jego alternatywa jest ju\u017c w przygotowaniu i za kilka tygodni lub miesi\u0119cy powinna ona ujrze\u0107 \u015bwiat\u0142o dzienne.<\/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\/reactjs\/rfcs\/pull\/220#issuecomment-1259938816\">https:\/\/github.com\/reactjs\/rfcs\/pull\/220#issuecomment-1259938816<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/reactjs\/rfcs\/pull\/220#issuecomment-1259938816\">https:\/\/github.com\/reactjs\/rfcs\/pull\/220#issuecomment-1259938816<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>4. Po 8 latach wreszcie doczekali\u015bmy si\u0119 axios 1.0<\/h2>\n","innerContent":["\n<h2>4. Po 8 latach wreszcie doczekali\u015bmy si\u0119 axios 1.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Axios to jedna z najpopularniejszych klient\u00f3w HTTP zar\u00f3wno dla przegl\u0105darek jak i Node.js. Pomimo, \u017ce czasy kiedy korzysta\u0107 musieli\u015bmy z `XMLHttpRequest` mamy ju\u017c dawno za sob\u0105, a du\u017co przyst\u0119pniejsze Fetch API wspierane jest przez wszystkie znacz\u0105ce \u015brodowiska, popularno\u015b\u0107 biblioteki nie maleje. Na GitHubie zgromadzi\u0142a ona ju\u017c prawie 100 tysi\u0119cy gwiazdek, a tylko w ostatnim tygodniu z npm pobran\u0105 j\u0105 ponad 32 miliony razy. A\u017c ci\u0119\u017ako uwierzy\u0107, \u017ce tak popularna biblioteka dopiero teraz doczeka\u0142\u0105 si\u0119 stabilnego API i wersji 1.0.<\/p>\n","innerContent":["\n<p>Axios to jedna z najpopularniejszych klient\u00f3w HTTP zar\u00f3wno dla przegl\u0105darek jak i Node.js. Pomimo, \u017ce czasy kiedy korzysta\u0107 musieli\u015bmy z `XMLHttpRequest` mamy ju\u017c dawno za sob\u0105, a du\u017co przyst\u0119pniejsze Fetch API wspierane jest przez wszystkie znacz\u0105ce \u015brodowiska, popularno\u015b\u0107 biblioteki nie maleje. Na GitHubie zgromadzi\u0142a ona ju\u017c prawie 100 tysi\u0119cy gwiazdek, a tylko w ostatnim tygodniu z npm pobran\u0105 j\u0105 ponad 32 miliony razy. A\u017c ci\u0119\u017ako uwierzy\u0107, \u017ce tak popularna biblioteka dopiero teraz doczeka\u0142\u0105 si\u0119 stabilnego API i wersji 1.0.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11259,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-31.jpeg\" alt=\"\" class=\"wp-image-11259\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-31.jpeg\" alt=\"\" class=\"wp-image-11259\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli zastanawiacie si\u0119, co nowego wprowadza axios 1.0 to ju\u017c \u015bpiesz\u0119 z odpowiedzi\u0105 - niewiele. Nowo\u015bci to przede wszystkim usprawnienia w systemie typowania i gar\u015b\u0107 bugfix\u00f3w i kilka drobnych zmian w API. Zreszt\u0105 niczego innego oczekiwa\u0107 nie mo\u017cna po bibliotece, kt\u00f3ra sp\u0119dzi\u0142a ca\u0142e 8 lat w wersji beta.<\/p>\n","innerContent":["\n<p>Je\u015bli zastanawiacie si\u0119, co nowego wprowadza axios 1.0 to ju\u017c \u015bpiesz\u0119 z odpowiedzi\u0105 - niewiele. Nowo\u015bci to przede wszystkim usprawnienia w systemie typowania i gar\u015b\u0107 bugfix\u00f3w i kilka drobnych zmian w API. Zreszt\u0105 niczego innego oczekiwa\u0107 nie mo\u017cna po bibliotece, kt\u00f3ra sp\u0119dzi\u0142a ca\u0142e 8 lat w wersji beta.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11261,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/giphy-5.gif\" alt=\"\" class=\"wp-image-11261\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/giphy-5.gif\" alt=\"\" class=\"wp-image-11261\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/axios\/axios\/blob\/v1.x\/CHANGELOG.md\">https:\/\/github.com\/axios\/axios\/blob\/v1.x\/CHANGELOG.md<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/axios\/axios\/blob\/v1.x\/CHANGELOG.md\">https:\/\/github.com\/axios\/axios\/blob\/v1.x\/CHANGELOG.md<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>5. TypeScript ma ju\u017c 10 lat!<\/h2>\n","innerContent":["\n<h2>5. TypeScript ma ju\u017c 10 lat!<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jest kwiecie\u0144 2012 roku. Barack Obama w\u0142a\u015bnie po raz drugi wygra\u0142 wybory prezydenckie w Stanach Zjednoczonych, na ekranach kin pojawiaj\u0105 si\u0119 pierwsi Avengers, a Polacy z wielkimi nadziejami wyczekuj\u0105 nadchodz\u0105cego Euro 2012. W tym samym czasie Microsoft prezentuje zupe\u0142nie nowy j\u0119zyk, b\u0119d\u0105cy rozszerzeniem JavaScript o typy podobne do tych znanych z Javy czy C#.<\/p>\n","innerContent":["\n<p>Jest kwiecie\u0144 2012 roku. Barack Obama w\u0142a\u015bnie po raz drugi wygra\u0142 wybory prezydenckie w Stanach Zjednoczonych, na ekranach kin pojawiaj\u0105 si\u0119 pierwsi Avengers, a Polacy z wielkimi nadziejami wyczekuj\u0105 nadchodz\u0105cego Euro 2012. W tym samym czasie Microsoft prezentuje zupe\u0142nie nowy j\u0119zyk, b\u0119d\u0105cy rozszerzeniem JavaScript o typy podobne do tych znanych z Javy czy C#.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11263,"width":661,"height":372,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/thecakeisalie.jpeg\" alt=\"\" class=\"wp-image-11263\" width=\"661\" height=\"372\"\/><figcaption>\u015awi\u0119tuj\u0105c urodziny TypeScript pami\u0119tajcie, ciastko nie jest prawdziwe<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/thecakeisalie.jpeg\" alt=\"\" class=\"wp-image-11263\" width=\"661\" height=\"372\"\/><figcaption>\u015awi\u0119tuj\u0105c urodziny TypeScript pami\u0119tajcie, ciastko nie jest prawdziwe<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z dzisiejszej perspektywy mo\u017ce wydawa\u0107 si\u0119, \u017ce TypeScript od pocz\u0105tku skazany by\u0142 na sukces. W rzeczywisto\u015bci, w 2012 roku nie by\u0142o to takie pewne. Spora cz\u0119\u015b\u0107 JavaScriptowej spo\u0142eczno\u015bci przez lata przyzwyczajona do pe\u0142nej swobody odrzuca\u0142a zalety jakie wnosi\u0142 TypeScript. Do tego po drugiej strony barykady Google pr\u00f3bowa\u0142 promowa\u0107 swoj\u0105 alternatyw\u0119 w postaci Darta, a kilka lat p\u00f3\u017aniej Facebook wyjdzie ze swoj\u0105 alternatyw\u0105 w postaci Flow.<\/p>\n","innerContent":["\n<p>Z dzisiejszej perspektywy mo\u017ce wydawa\u0107 si\u0119, \u017ce TypeScript od pocz\u0105tku skazany by\u0142 na sukces. W rzeczywisto\u015bci, w 2012 roku nie by\u0142o to takie pewne. Spora cz\u0119\u015b\u0107 JavaScriptowej spo\u0142eczno\u015bci przez lata przyzwyczajona do pe\u0142nej swobody odrzuca\u0142a zalety jakie wnosi\u0142 TypeScript. Do tego po drugiej strony barykady Google pr\u00f3bowa\u0142 promowa\u0107 swoj\u0105 alternatyw\u0119 w postaci Darta, a kilka lat p\u00f3\u017aniej Facebook wyjdzie ze swoj\u0105 alternatyw\u0105 w postaci Flow.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po 10 latach coraz ci\u0119\u017cej znale\u017a\u0107 ju\u017c krytyk\u00f3w TypeScript. Bez wahania mo\u017cna powiedzie\u0107, \u017ce j\u0119zyk przebi\u0142 si\u0119 do mainstreamu. Od 2019 roku znajduje si\u0119 on <a href=\"https:\/\/insights.stackoverflow.com\/survey\/2019#technology-_-programming-scripting-and-markup-languages\">w top 10 najpopularniejszych j\u0119zyk\u00f3w programowania<\/a> wed\u0142ug Stackoverflow Survey, a w ostatniej edycji <a href=\"https:\/\/survey.stackoverflow.co\/2022\/#technology-most-popular-technologies\">uplasowa\u0142 si\u0119 a\u017c na 5 miejscu<\/a>. O jego wp\u0142ywie na spo\u0142eczno\u015b\u0107 JavaScript najlepiej \u015bwiadczy fakt, \u017ce w ankiecie State of JS statyczne typowanie od 2020 roku wybierane jest <a href=\"https:\/\/2020.stateofjs.com\/en-US\/opinions\/#missing_from_js\">najbardziej po\u017c\u0105dan\u0105 funkcjonalno\u015bci\u0105 JavaScript<\/a>. Spo\u0142eczno\u015b\u0107 by\u0142a w tej kwestii na tyle wokalna, \u017ce Microsoft przygotowa\u0142 i obj\u0105\u0142 swoim patronatem <a href=\"https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/\">odpowiednie RFC<\/a>, kt\u00f3ra wprowadza typowanie do standardu JavaScript (na razie utkwi\u0142o ono w Stage 1, wi\u0119c zanim trafi ono do standardu przyjdzie nam jeszcze troch\u0119 poczeka\u0107).<\/p>\n","innerContent":["\n<p>Po 10 latach coraz ci\u0119\u017cej znale\u017a\u0107 ju\u017c krytyk\u00f3w TypeScript. Bez wahania mo\u017cna powiedzie\u0107, \u017ce j\u0119zyk przebi\u0142 si\u0119 do mainstreamu. Od 2019 roku znajduje si\u0119 on <a href=\"https:\/\/insights.stackoverflow.com\/survey\/2019#technology-_-programming-scripting-and-markup-languages\">w top 10 najpopularniejszych j\u0119zyk\u00f3w programowania<\/a> wed\u0142ug Stackoverflow Survey, a w ostatniej edycji <a href=\"https:\/\/survey.stackoverflow.co\/2022\/#technology-most-popular-technologies\">uplasowa\u0142 si\u0119 a\u017c na 5 miejscu<\/a>. O jego wp\u0142ywie na spo\u0142eczno\u015b\u0107 JavaScript najlepiej \u015bwiadczy fakt, \u017ce w ankiecie State of JS statyczne typowanie od 2020 roku wybierane jest <a href=\"https:\/\/2020.stateofjs.com\/en-US\/opinions\/#missing_from_js\">najbardziej po\u017c\u0105dan\u0105 funkcjonalno\u015bci\u0105 JavaScript<\/a>. Spo\u0142eczno\u015b\u0107 by\u0142a w tej kwestii na tyle wokalna, \u017ce Microsoft przygotowa\u0142 i obj\u0105\u0142 swoim patronatem <a href=\"https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/\">odpowiednie RFC<\/a>, kt\u00f3ra wprowadza typowanie do standardu JavaScript (na razie utkwi\u0142o ono w Stage 1, wi\u0119c zanim trafi ono do standardu przyjdzie nam jeszcze troch\u0119 poczeka\u0107).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11265,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-33.jpeg\" alt=\"\" class=\"wp-image-11265\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-33.jpeg\" alt=\"\" class=\"wp-image-11265\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na zako\u0144czenie tej nostalgicznej podr\u00f3\u017cy do przysz\u0142o\u015bci ma\u0142a ciekawostka. Czy wiecie, \u017ce Google podczas prac na Angular 2 rozwija\u0142 r\u00f3wnolegle wersj\u0119 w TypeScript jak i Dart? A czy wiecie, \u017ce ze wzgl\u0119du na brak wsparcia dla dekorator\u00f3w w standardzie TypeScript Google chcia\u0142 rozwija\u0107 i utrzymywa\u0107 w\u0142asny fork TypeScript? Na szcz\u0119\u015bcie obie korporacje ostatecznie dosz\u0142y do porozumienia. Kto wie czy TypeScript by\u0142by tu gdzie jest teraz, gdyby ju\u017c na pocz\u0105tku jego historii dosz\u0142o do podzia\u0142u spo\u0142eczno\u015bci.<\/p>\n","innerContent":["\n<p>Na zako\u0144czenie tej nostalgicznej podr\u00f3\u017cy do przysz\u0142o\u015bci ma\u0142a ciekawostka. Czy wiecie, \u017ce Google podczas prac na Angular 2 rozwija\u0142 r\u00f3wnolegle wersj\u0119 w TypeScript jak i Dart? A czy wiecie, \u017ce ze wzgl\u0119du na brak wsparcia dla dekorator\u00f3w w standardzie TypeScript Google chcia\u0142 rozwija\u0107 i utrzymywa\u0107 w\u0142asny fork TypeScript? Na szcz\u0119\u015bcie obie korporacje ostatecznie dosz\u0142y do porozumienia. Kto wie czy TypeScript by\u0142by tu gdzie jest teraz, gdyby ju\u017c na pocz\u0105tku jego historii dosz\u0142o do podzia\u0142u spo\u0142eczno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11267,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-32.jpeg\" alt=\"\" class=\"wp-image-11267\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-32.jpeg\" alt=\"\" class=\"wp-image-11267\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/devblogs.microsoft.com\/typescript\/ten-years-of-typescript\/\">https:\/\/devblogs.microsoft.com\/typescript\/ten-years-of-typescript\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/devblogs.microsoft.com\/typescript\/ten-years-of-typescript\/\">https:\/\/devblogs.microsoft.com\/typescript\/ten-years-of-typescript\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus #1: State of CSS Survey 2022<\/h2>\n","innerContent":["\n<h2>Bonus #1: State of CSS Survey 2022<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ruszy\u0142a ankieta State of CSS 2022 i link do niej znajdziecie w \u017ar\u00f3d\u0142ach poni\u017cej. Jak co roku, ka\u017cdemu gor\u0105co polecam po\u015bwi\u0119ci\u0107 jej kilka minut. Nawet je\u015bli nie dlatego, \u017ceby wspom\u00f3c spo\u0142eczno\u015b\u0107, to dlatego, \u017ce jest to \u015bwietne \u017ar\u00f3d\u0142o, z kt\u00f3rego dowiecie si\u0119 jakie nowe funkcjonalno\u015bci omin\u0119\u0142y Was w ostatnich latach. Na ko\u0144cu ankiety otrzymacie zar\u00f3wno procentowe podsumowanie Waszej wiedzy w poszczeg\u00f3lnych obszarach jak i zestaw link\u00f3w, dzi\u0119ki kt\u00f3rym szybko nadrobicie braki.<\/p>\n","innerContent":["\n<p>Ruszy\u0142a ankieta State of CSS 2022 i link do niej znajdziecie w \u017ar\u00f3d\u0142ach poni\u017cej. Jak co roku, ka\u017cdemu gor\u0105co polecam po\u015bwi\u0119ci\u0107 jej kilka minut. Nawet je\u015bli nie dlatego, \u017ceby wspom\u00f3c spo\u0142eczno\u015b\u0107, to dlatego, \u017ce jest to \u015bwietne \u017ar\u00f3d\u0142o, z kt\u00f3rego dowiecie si\u0119 jakie nowe funkcjonalno\u015bci omin\u0119\u0142y Was w ostatnich latach. Na ko\u0144cu ankiety otrzymacie zar\u00f3wno procentowe podsumowanie Waszej wiedzy w poszczeg\u00f3lnych obszarach jak i zestaw link\u00f3w, dzi\u0119ki kt\u00f3rym szybko nadrobicie braki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11269,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/giphy-6.gif\" alt=\"\" class=\"wp-image-11269\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/giphy-6.gif\" alt=\"\" class=\"wp-image-11269\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/survey.devographics.com\/survey\/state-of-css\/2022\">https:\/\/survey.devographics.com\/survey\/state-of-css\/2022<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/survey.devographics.com\/survey\/state-of-css\/2022\">https:\/\/survey.devographics.com\/survey\/state-of-css\/2022<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus #2: Wybrano sk\u0142adni\u0119 zagnie\u017cd\u017conych CSS-\u00f3w<\/h2>\n","innerContent":["\n<h2>Bonus #2: Wybrano sk\u0142adni\u0119 zagnie\u017cd\u017conych CSS-\u00f3w<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W lipcu tego roku, <a href=\"https:\/\/developer.chrome.com\/blog\/help-css-nesting\/\">Google poprosi\u0142 spo\u0142eczno\u015b\u0107 o opini\u0119 na temat mo\u017cliwych sk\u0142adni zagnie\u017cd\u017conych CSS-\u00f3w.<\/a> W tym tygodniu korporacja z Mountain View podzieli\u0142a si\u0119 ze \u015bwiatem wynikami. Z mia\u017cd\u017c\u0105c\u0105 przewag\u0105 wygra\u0142a sk\u0142adnia `@nest`.<\/p>\n","innerContent":["\n<p>W lipcu tego roku, <a href=\"https:\/\/developer.chrome.com\/blog\/help-css-nesting\/\">Google poprosi\u0142 spo\u0142eczno\u015b\u0107 o opini\u0119 na temat mo\u017cliwych sk\u0142adni zagnie\u017cd\u017conych CSS-\u00f3w.<\/a> W tym tygodniu korporacja z Mountain View podzieli\u0142a si\u0119 ze \u015bwiatem wynikami. Z mia\u017cd\u017c\u0105c\u0105 przewag\u0105 wygra\u0142a sk\u0142adnia `@nest`.<\/p>\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\">.foo {\n  color: #111;\n\n  &amp; .bar {\n    color: #eee;\n  }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">.foo {\n  color: #111;\n\n  &amp; .bar {\n    color: #eee;\n  }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11271,"width":697,"height":452,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/8u6XZo3MyDuMmrUnx8UA.jpg\" alt=\"\" class=\"wp-image-11271\" width=\"697\" height=\"452\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/8u6XZo3MyDuMmrUnx8UA.jpg\" alt=\"\" class=\"wp-image-11271\" width=\"697\" height=\"452\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Niestety wyniki ankiety nie przek\u0142adaj\u0105 si\u0119 bezpo\u015brednio na standard CSS. Google zapowiada jednak, \u017ce b\u0119dzie ci\u0119\u017cko pracowa\u0107 wraz z CSS Working Group, aby proponowana sk\u0142adnia jak najszybciej trafi\u0142a do standardu.<\/p>\n","innerContent":["\n<p>Niestety wyniki ankiety nie przek\u0142adaj\u0105 si\u0119 bezpo\u015brednio na standard CSS. Google zapowiada jednak, \u017ce b\u0119dzie ci\u0119\u017cko pracowa\u0107 wraz z CSS Working Group, aby proponowana sk\u0142adnia jak najszybciej trafi\u0142a do standardu.<\/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:\/\/developer.chrome.com\/en\/blog\/help-css-nesting-results\/\">https:\/\/developer.chrome.com\/en\/blog\/help-css-nesting-results\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/developer.chrome.com\/en\/blog\/help-css-nesting-results\/\">https:\/\/developer.chrome.com\/en\/blog\/help-css-nesting-results\/<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/11254","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=11254"}],"version-history":[{"count":5,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/11254\/revisions"}],"predecessor-version":[{"id":11281,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/11254\/revisions\/11281"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/11273"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=11254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=11254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=11254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}