{"id":6781,"date":"2025-01-11T12:34:06","date_gmt":"2025-01-11T12:34:06","guid":{"rendered":"https:\/\/howtogeek.blog\/pl\/?p=6781"},"modified":"2025-01-11T12:34:06","modified_gmt":"2025-01-11T12:34:06","slug":"create-your-first-web-application-a-beginners-guide-to-building-a-simple-notes-app-and-word-counter","status":"publish","type":"post","link":"https:\/\/howtogeek.blog\/pl\/create-your-first-web-application-a-beginners-guide-to-building-a-simple-notes-app-and-word-counter\/","title":{"rendered":"Utw\u00f3rz swoj\u0105 pierwsz\u0105 aplikacj\u0119 internetow\u0105: Podr\u0119cznik dla pocz\u0105tkuj\u0105cych dotycz\u0105cy tworzenia prostej aplikacji do notatek i licznika s\u0142\u00f3w"},"content":{"rendered":"<p>Rozpocz\u0119cie przygody z kodowaniem mo\u017ce wydawa\u0107 si\u0119 zniech\u0119caj\u0105ce po\u015br\u00f3d przyt\u0142aczaj\u0105cego wyboru j\u0119zyk\u00f3w i framework\u00f3w. Mo\u017cesz nawet pomy\u015ble\u0107 o powierzeniu wszystkiego sztucznej inteligencji! Niemniej jednak programowanie dla sieci mo\u017ce by\u0107 ekscytuj\u0105ce, dost\u0119pne i ca\u0142kowicie darmowe!<\/p>\n<h2 id=\"what-youll-build\">Co zbudujesz<\/h2>\n<p>W tym samouczku utworzysz prost\u0105 aplikacj\u0119 internetow\u0105 s\u0142u\u017c\u0105c\u0105 do przechowywania notatek tekstowych i jednoczesnego liczenia znak\u00f3w i s\u0142\u00f3w w tych notatkach.<\/p>\n<p>Ta aplikacja stale zapisuje dane, umo\u017cliwiaj\u0105c jej pobieranie tekstu nawet po od\u015bwie\u017ceniu strony lub jej ponownym otwarciu. To praktyczne rozwi\u0105zanie do utrzymywania szybkiego dost\u0119pu do wa\u017cnego tekstu, czy to adres\u00f3w, adres\u00f3w URL, czy czegokolwiek innego.<\/p>\n<figure class=\"wp-block-image\"><img alt=\"Przyk\u0142ad prostej aplikacji internetowej wy\u015bwietlaj\u0105cej notatki zawieraj\u0105ce wpisy w kalendarzu i list\u0119 adres\u00f3w URL.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-example.webp\" title=\"Przyk\u0142ad prostej aplikacji internetowej wy\u015bwietlaj\u0105cej notatki zawieraj\u0105ce wpisy w kalendarzu i list\u0119 adres\u00f3w URL.\" width=\"960\"\/><\/figure>\n<p>Ponadto aplikacja \u015bledzi liczb\u0119 znak\u00f3w i s\u0142\u00f3w, zapewniaj\u0105c doskona\u0142e wprowadzenie do manipulacji ci\u0105gami znak\u00f3w. Podczas gdy aplikacja ma podstawowy projekt, ten samouczek wyposa\u017ca Ci\u0119 w podstawowe umiej\u0119tno\u015bci tworzenia aplikacji internetowych, odblokowuj\u0105c ogromne mo\u017cliwo\u015bci kodowania.<\/p>\n<h2 id=\"how-youll-build-it\">Jak to zbudujesz<\/h2>\n<p>Chocia\u017c aplikacje internetowe mog\u0105 si\u0119 znacznie r\u00f3\u017cni\u0107, zazwyczaj integruj\u0105 trzy podstawowe technologie: HTML, CSS i JavaScript. Ka\u017cdy z tych komponent\u00f3w pe\u0142ni kluczow\u0105 funkcj\u0119 w rozwoju sieci:<\/p>\n<ul>\n<li><strong>HTML:<\/strong> Jest to struktura Twojej aplikacji internetowej, okre\u015blaj\u0105ca spos\u00f3b organizacji tre\u015bci. HTML definiuje, czy tekst jest akapitem, nag\u0142\u00f3wkiem czy elementem listy.<\/li>\n<li><strong>CSS:<\/strong> kaskadowe arkusze styl\u00f3w dodaj\u0105 styl do Twojej zawarto\u015bci, umo\u017cliwiaj\u0105c Ci zmian\u0119 kolor\u00f3w, czcionek i uk\u0142adu. Mo\u017cesz u\u017cy\u0107 CSS, aby pogrubi\u0107 elementy, dostosowa\u0107 obramowania i umie\u015bci\u0107 elementy na ekranie.<\/li>\n<li><strong>JavaScript:<\/strong> Ten j\u0119zyk programowania jest integraln\u0105 cz\u0119\u015bci\u0105 wprowadzania funkcjonalno\u015bci do aplikacji internetowej. JavaScript mo\u017ce tworzy\u0107 interaktywne do\u015bwiadczenia, takie jak pokazywanie\/ukrywanie element\u00f3w lub budowanie z\u0142o\u017conych aplikacji, takich jak gry.<\/li>\n<\/ul>\n<figure class=\"wp-block-image\"><img alt=\"Strona g\u0142\u00f3wna serwisu web.dev z materia\u0142ami do nauki j\u0119zyk\u00f3w HTML, CSS i JavaScript.\" class=\"wp-image\" decoding=\"async\" height=\"734\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-dev-homepage.webp\" title=\"Strona g\u0142\u00f3wna serwisu web.dev z materia\u0142ami do nauki j\u0119zyk\u00f3w HTML, CSS i JavaScript.\" width=\"1388\"\/><\/figure>\n<h2 id=\"the-app-structure\">Struktura aplikacji<\/h2>\n<p>Aplikacja, kt\u00f3r\u0105 zamierzasz utworzy\u0107, sk\u0142ada si\u0119 z trzech prostych plik\u00f3w: <code>index.html<\/code>, <code>styles.css<\/code>i <code>script.js<\/code>.<\/p>\n<p>Nie ma zaawansowanych wymaga\u0144, aby uruchomi\u0107 t\u0119 aplikacj\u0119 \u2014 wystarczy przegl\u0105darka internetowa. Poniewa\u017c jest to aplikacja front-end, nie ma potrzeby stosowania j\u0119zyk\u00f3w skryptowych back-end, takich jak PHP lub serwery lokalne. Po zako\u0144czeniu po prostu otw\u00f3rz <code>index.html<\/code>w przegl\u0105darce, aby zobaczy\u0107 swoj\u0105 aplikacj\u0119 w akcji.<\/p>\n<p>Ta aplikacja wykorzystuje interfejs API Web Storage do zapisywania tekstu, co pozwala na przechowywanie informacji bez konieczno\u015bci zapisywania ich w plikach na dysku, gdy\u017c JavaScript nie ma dost\u0119pu do systemu plik\u00f3w.<\/p>\n<h2 id=\"how-to-build-the-note-taker\">Jak zbudowa\u0107 notatnik<\/h2>\n<p>Zacznij od utworzenia trzech niezb\u0119dnych plik\u00f3w w tym samym katalogu. Alternatywnie mo\u017cesz pobra\u0107 pliki z <a href=\"https:\/\/github.com\/bobbykjack\/text\" target=\"_blank\">tego repozytorium GitHub<\/a> .<\/p>\n<h3 id=\"building-the-structure-with-html\">Budowanie struktury za pomoc\u0105 HTML<\/h3>\n<p>Plik <code>index.html<\/code>przedstawia struktur\u0119 zawarto\u015bci Twojej aplikacji. Zawiera odniesienia do plik\u00f3w CSS i JavaScript, umo\u017cliwiaj\u0105c przegl\u0105darce ich po\u0142\u0105czenie w p\u0142ynne dzia\u0142anie.<\/p>\n<p>Podobnie jak ka\u017cdy dokument HTML, g\u0142\u00f3wna struktura sk\u0142ada si\u0119 z sekcji nag\u0142\u00f3wkowej zawieraj\u0105cej metadane oraz cz\u0119\u015bci g\u0142\u00f3wnej zawieraj\u0105cej tre\u015b\u0107:<\/p>\n<p> <code><br \/>\n<span>&lt;!DOCTYPE html&gt;<\/span><br \/>\n<span>&lt;html&gt;<\/span><br \/>\n<span>&lt;head&gt;<\/span><br \/>\n<span>...&lt;\/head&gt;<\/span><br \/>\n<span>&lt;body&gt;<\/span><br \/>\n<span>...&lt;\/body&gt;<\/span><br \/>\n<span>&lt;\/html&gt;<\/span><br \/>\n<\/code><\/p>\n<p>Sekcja nag\u0142\u00f3wka zawiera kr\u00f3tkie metadane, w tym tytu\u0142 strony (widoczny na pasku tytu\u0142u przegl\u0105darki) i link do <code>styles.css<\/code>pliku:<\/p>\n<p> <code><br \/>\n<span>&lt;title&gt;Text&lt;\/title&gt;<\/span><br \/>\n<span>&lt;link rel=\"stylesheet\"href=\"styles.css\"\/&gt;<\/span><br \/>\n<\/code><\/p>\n<p>Tre\u015b\u0107 jest bardziej szczeg\u00f3\u0142owa i zawiera kluczowe elementy:<\/p>\n<p> <code><br \/>\n<span>&lt;div id=\"counter\"&gt;<\/span><br \/>\n<span>words: &lt;span id=\"words\"&gt;0&lt;\/span&gt;<\/span><br \/>\n<span>\/ characters: &lt;span id=\"chars\"&gt;0&lt;\/span&gt;<\/span><br \/>\n<span>&lt;\/div&gt;<\/span><br \/>\n<span>&lt;textarea id=\"text\"autofocus=\"1\"&gt;&lt;\/textarea&gt;<\/span><br \/>\n<span>&lt;script src=\"script.js\"&gt;&lt;\/script&gt;<\/span><br \/>\n<\/code><\/p>\n<p>Element <code>div<\/code>, zidentyfikowany jako \u201ecount\u201d, zawiera liczb\u0119 s\u0142\u00f3w i znak\u00f3w. Pozostaje na g\u00f3rze i aktualizuje si\u0119 dynamicznie w miar\u0119 zmian tekstu.<\/p>\n<p>Wa\u017cne jest, aby zwr\u00f3ci\u0107 uwag\u0119 na u\u017cycie <code>id<\/code>atrybut\u00f3w \u2014 ich unikalne warto\u015bci pomagaj\u0105 nada\u0107 tym elementom styl i okre\u015bli\u0107 ich funkcjonalno\u015b\u0107.<\/p>\n<p>Zapewnia <code>textarea<\/code>obszar, w kt\u00f3rym u\u017cytkownicy mog\u0105 wprowadza\u0107 tekst z <code>autofocus<\/code>atrybutem zapewniaj\u0105cym gotowo\u015b\u0107 do pisania po za\u0142adowaniu strony. Na koniec HTML odwo\u0142uje si\u0119 do <code>script.js<\/code>pliku.<\/p>\n<p>W tym momencie otw\u00f3rz <code>index.html<\/code>w przegl\u0105darce. Jeszcze nie b\u0119dzie dzia\u0142a\u0107 i mo\u017ce nie wygl\u0105da\u0107 dobrze, ale sprawdzanie post\u0119p\u00f3w na ka\u017cdym etapie jest pomocne.<\/p>\n<figure class=\"wp-block-image\"><img alt=\"Widok aplikacji internetowej do robienia notatek z domy\u015blnymi stylami przegl\u0105darki, pokazuj\u0105cy wszystko zebrane w lewym g\u00f3rnym rogu.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-no-style.webp\" title=\"Widok aplikacji internetowej do robienia notatek z domy\u015blnymi stylami przegl\u0105darki, pokazuj\u0105cy wszystko zebrane w lewym g\u00f3rnym rogu.\" width=\"960\"\/><\/figure>\n<h3 id=\"making-things-look-good-with-css\">Sprawianie, \u017ce rzeczy wygl\u0105daj\u0105 dobrze za pomoc\u0105 CSS<\/h3>\n<p>Cho\u0107 ta podstawowa aplikacja nie wymaga znacz\u0105cych zmian w projekcie, mo\u017cemy ulepszy\u0107 jej uk\u0142ad, nadaj\u0105c jej nieco stylu.<\/p>\n<p>Najpierw ustalamy styl nadwozia, aby okre\u015bli\u0107 og\u00f3lny wygl\u0105d:<\/p>\n<p> <code><br \/>\n<span>body {<\/span><br \/>\n<span> margin: 0;<\/span><br \/>\n<span> padding: 0;<\/span><br \/>\n<span> display: grid;<\/span><br \/>\n<span> min-height: 100vh;<\/span><br \/>\n<span> grid-template-rows: min-content 1fr;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>Ten CSS wykorzystuje <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/CSS_grid_layout\" target=\"_blank\">uk\u0142ad siatki<\/a> , aby rozmie\u015bci\u0107 liczb\u0119 s\u0142\u00f3w i znak\u00f3w w w\u0105skim wierszu nad obszarem tekstowym. <code>grid-template-rows<\/code>W\u0142a\u015bciwo\u015b\u0107 okre\u015bla, \u017ce \u200b\u200bwiersz liczby powinien zajmowa\u0107 najmniejsz\u0105 mo\u017cliw\u0105 przestrze\u0144 (min-content), podczas gdy obszar tekstowy wype\u0142nia pozosta\u0142\u0105 przestrze\u0144 (1fr).<\/p>\n<p>Wiersz licznika otrzymuje podstawowy styl, aby odr\u00f3\u017cni\u0107 go od obszaru tekstowego, g\u0142\u00f3wnie za po\u015brednictwem t\u0142a:<\/p>\n<p> <code><br \/>\n<span>#counter {<\/span><br \/>\n<span> font-family: sans-serif;<\/span><br \/>\n<span> background-color: #f7f7f7;<\/span><br \/>\n<span> text-align: center;<\/span><br \/>\n<span> width: 100%;<\/span><br \/>\n<span> padding: 0 0.5em 0;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>Obszar tekstowy jest stylizowany w taki spos\u00f3b, aby zapewni\u0107 czytelno\u015b\u0107 tekstu, pozostawiaj\u0105c odpowiedni\u0105 ilo\u015b\u0107 wolnego miejsca:<\/p>\n<p> <code><br \/>\n<span>textarea {<\/span><br \/>\n<span> width: 100%;<\/span><br \/>\n<span> height: 100%;<\/span><br \/>\n<span> font-size: 16pt;<\/span><br \/>\n<span> padding: 1em;<\/span><br \/>\n<span> box-sizing: border-box;<\/span><br \/>\n<span> outline: 0;<\/span><br \/>\n<span> border: none;<\/span><br \/>\n<span> border-top: 1px solid #999;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<figure class=\"wp-block-image\"><img alt=\"Aplikacja do robienia notatek z mo\u017cliwo\u015bci\u0105 dostosowania styl\u00f3w wy\u015bwietla pasek licznika u g\u00f3ry, a poni\u017cej pe\u0142nowymiarowy obszar tekstowy.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-with-style.webp\" title=\"Aplikacja do robienia notatek z mo\u017cliwo\u015bci\u0105 dostosowania styl\u00f3w wy\u015bwietla pasek licznika u g\u00f3ry, a poni\u017cej pe\u0142nowymiarowy obszar tekstowy.\" width=\"960\"\/><\/figure>\n<h3 id=\"adding-functionality-with-javascript\">Dodawanie funkcjonalno\u015bci za pomoc\u0105 JavaScript<\/h3>\n<p>Maj\u0105c ju\u017c podstawy, czas na dodanie funkcjonalno\u015bci do aplikacji \u2014 kodu, kt\u00f3ry j\u0105 o\u017cywi!<\/p>\n<p>Zanim zag\u0142\u0119bisz si\u0119 w kodowanie, konieczne jest nakre\u015blenie zamierzonej funkcjonalno\u015bci. W przypadku tej aplikacji skupisz si\u0119 na dw\u00f3ch g\u0142\u00f3wnych celach:<\/p>\n<ul>\n<li>Zatwierd\u017a i od\u015bwie\u017c wprowadzony tekst.<\/li>\n<li>Dynamicznie aktualizuj liczb\u0119 znak\u00f3w i s\u0142\u00f3w.<\/li>\n<\/ul>\n<p>Te funkcje wymagaj\u0105 aktualizacji pewnych element\u00f3w dokumentu. Dlatego zacznij od uzyskania odniesie\u0144 do tych w\u0119z\u0142\u00f3w za pomoc\u0105 <code>getElementById<\/code>metody:<\/p>\n<p> <code><br \/>\n<span>const words = document.getElementById(\"words\");<\/span><br \/>\n<span>const chars = document.getElementById(\"chars\");<\/span><br \/>\n<span>const textarea = document.getElementById(\"text\");<\/span><br \/>\n<\/code><\/p>\n<p>Tutaj <code>words<\/code>, <code>chars<\/code>i <code>textarea<\/code>odpowiadaj\u0105 odpowiednim sekcjom w dokumencie, zidentyfikowanym na podstawie atrybut\u00f3w ID.<\/p>\n<p>Nast\u0119pnie wprowad\u017a interaktywno\u015b\u0107, ustawiaj\u0105c aplikacj\u0119 tak, aby reagowa\u0142a po zmianie tekstu:<\/p>\n<p> <code><br \/>\n<span>textarea.addEventListener(\"input\", function(ev) {<\/span><br \/>\n<span> localStorage.setItem(\"text\", ev.target.value);<\/span><br \/>\n<span> update_counts(ev.target.value);<\/span><br \/>\n<span>});<\/span><br \/>\n<\/code><\/p>\n<p>Metoda <code>addEventListener<\/code>wi\u0105\u017ce funkcj\u0119, kt\u00f3ra ma zosta\u0107 wyzwolona, \u200b\u200bgdy wyst\u0105pi okre\u015blone zdarzenie. W tym przypadku, gdy u\u017cytkownik wejdzie w interakcj\u0119 z textarea, zdarzenie \u201einput\u201d wyzwala funkcj\u0119.<\/p>\n<p>Nast\u0119pnie API Web Storage jest u\u017cywane do zachowania bie\u017c\u0105cej zawarto\u015bci textarea, dost\u0119pnej za po\u015brednictwem <code>ev.target.value<\/code>. <code>setItem<\/code>Metoda kojarzy klucz z danymi, kt\u00f3re maj\u0105 zosta\u0107 zapisane.<\/p>\n<p>Aby mie\u0107 pewno\u015b\u0107, \u017ce tekst zostanie za\u0142adowany po zainicjowaniu lub od\u015bwie\u017ceniu aplikacji, dodaj kolejnego s\u0142uchacza:<\/p>\n<p> <code><br \/>\n<span>window.addEventListener(\"load\", function(ev) {<\/span><br \/>\n<span> var text = localStorage.getItem(\"text\");<\/span><br \/>\n<span> textarea.value = text;<\/span><br \/>\n<span> update_counts(text);<\/span><br \/>\n<span>});<\/span><br \/>\n<\/code><\/p>\n<p>Ten nas\u0142uchiwacz odpowiada na zdarzenie \u0142adowania okna. Po za\u0142adowaniu okna pobiera zapisany tekst i odpowiednio ustawia warto\u015b\u0107 pola tekstowego, wywo\u0142uj\u0105c <code>update_counts()<\/code>od\u015bwie\u017cenie liczby s\u0142\u00f3w i znak\u00f3w.<\/p>\n<p>Pozosta\u0142a funkcjonalno\u015b\u0107 mie\u015bci si\u0119 w <code>update_counts()<\/code>funkcji, kt\u00f3ra wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<p> <code><br \/>\n<span>function update_counts(text) {<\/span><br \/>\n<span> chars.innerHTML = text.length;<\/span><br \/>\n<span> words.innerHTML = text.split(' ').length;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>W przeciwie\u0144stwie do textarea, zwyk\u0142y tekst nie ma atrybutu warto\u015bci; dlatego <code>innerHTML<\/code>zamiast tego u\u017cywana jest w\u0142a\u015bciwo\u015b\u0107. <code>length<\/code>W\u0142a\u015bciwo\u015b\u0107 ci\u0105gu pobiera ca\u0142kowit\u0105 liczb\u0119 znak\u00f3w.<\/p>\n<p>Aby podzieli\u0107 tekst na s\u0142owa, u\u017cywamy <code>text.split(' ')<\/code>, kt\u00f3ry dzieli ci\u0105g przy ka\u017cdym znaku spacji, tworz\u0105c tablic\u0119 s\u0142\u00f3w. W\u0142a\u015bciwo\u015b\u0107 d\u0142ugo\u015bci powsta\u0142ej tablicy podaje liczb\u0119 s\u0142\u00f3w.<\/p>\n<p>Jednak mo\u017cesz napotka\u0107 kilka problem\u00f3w z tym kodem:<\/p>\n<ol>\n<li>Program nie b\u0119dzie poprawnie liczy\u0142 pojedynczych s\u0142\u00f3w w wierszu bez otaczaj\u0105cych je spacji.<\/li>\n<li>Je\u015bli nie ma tekstu, funkcja b\u0142\u0119dnie zg\u0142osi pojedyncze s\u0142owo, co wynika ze sposobu <code>split<\/code>dzia\u0142ania.<\/li>\n<\/ol>\n<p>Aby rozwi\u0105za\u0107 pierwszy problem, rozwa\u017c podzia\u0142 na wyra\u017cenie regularne, aby uwzgl\u0119dni\u0107 znaki odst\u0119pu: <code>\\s<\/code>. Aby rozwi\u0105za\u0107 drugi problem, odfiltruj wszystkie puste ci\u0105gi:<\/p>\n<p> <code><br \/>\n<span> words.innerHTML = text.split(\/\\s\/).filter(function(n) { return n! = ''; }).length;<\/span><br \/>\n<\/code><\/p>\n<figure class=\"wp-block-image\"><img alt=\"Aplikacja internetowa z przyk\u0142adowym tekstem, pokazuj\u0105ca dok\u0142adn\u0105 liczb\u0119 znak\u00f3w i s\u0142\u00f3w.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-final.webp\" title=\"Aplikacja internetowa z przyk\u0142adowym tekstem, pokazuj\u0105ca dok\u0142adn\u0105 liczb\u0119 znak\u00f3w i s\u0142\u00f3w.\" width=\"960\"\/><\/figure>\n<p>Tworzenie u\u017cytecznych aplikacji internetowych mo\u017cna osi\u0105gn\u0105\u0107 za pomoc\u0105 zaledwie kilku podstawowych plik\u00f3w! Mo\u017cesz rozszerzy\u0107 t\u0119 prost\u0105 aplikacj\u0119 do robienia notatek, integruj\u0105c dodatkowe funkcje, takie jak wykorzystanie <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/location\" target=\"_blank\">w\u0142a\u015bciwo\u015bci window.location<\/a> do dost\u0119pu do adres\u00f3w URL lub umo\u017cliwienie zapisywania wielu notatek przez zmian\u0119 nazw przekazywanych do <code>localStorage.setItem<\/code>.<\/p>\n<h3>Dodatkowe informacje<\/h3>\n<h4><strong>1. Jakie s\u0105 wymagania wst\u0119pne dla tego samouczka dotycz\u0105cego aplikacji internetowej?<\/strong><\/h4>\n<p>Wszystko, czego potrzebujesz, to podstawowa znajomo\u015b\u0107 HTML, CSS i JavaScript. Narz\u0119dzia takie jak edytor tekstu (np. VSCode) i przegl\u0105darka internetowa r\u00f3wnie\u017c b\u0119d\u0105 pomocne.<\/p>\n<h4><strong>2. Czy mog\u0119 zmodyfikowa\u0107 t\u0119 aplikacj\u0119 internetow\u0105, aby doda\u0107 wi\u0119cej funkcji?<\/strong><\/h4>\n<p>Oczywi\u015bcie! Ten samouczek zapewnia podstaw\u0119. Mo\u017cesz doda\u0107 funkcjonalno\u015b\u0107, tak\u0105 jak zapisywanie wielu notatek, kategoryzowanie notatek, a nawet implementacj\u0119 funkcji wyszukiwania!<\/p>\n<h4><strong>3. Jak dzia\u0142a API Web Storage?<\/strong><\/h4>\n<p>Interfejs API Web Storage umo\u017cliwia aplikacjom internetowym przechowywanie danych w przegl\u0105darce. Przechowuje dane w parach klucz-warto\u015b\u0107, kt\u00f3re s\u0105 zachowywane nawet po zamkni\u0119ciu przegl\u0105darki, co u\u0142atwia ich p\u00f3\u017aniejsze pobranie.<\/p>\n<p><a class=\"xiaomi\" href=\"https:\/\/www.howtogeek.com\/build-your-first-web-app-a-simple-word-counter\/\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">\u0179r\u00f3d\u0142o i obrazy<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rozpocz\u0119cie przygody z kodowaniem mo\u017ce wydawa\u0107 si\u0119 zniech\u0119caj\u0105ce po\u015br\u00f3d przyt\u0142aczaj\u0105cego wyboru j\u0119zyk\u00f3w i framework\u00f3w. Mo\u017cesz nawet pomy\u015ble\u0107 o powierzeniu wszystkiego sztucznej inteligencji! Niemniej jednak programowanie dla sieci mo\u017ce by\u0107 ekscytuj\u0105ce, dost\u0119pne i ca\u0142kowicie darmowe! Co zbudujesz W tym samouczku utworzysz prost\u0105 aplikacj\u0119 internetow\u0105 s\u0142u\u017c\u0105c\u0105 do przechowywania notatek tekstowych i jednoczesnego liczenia znak\u00f3w i s\u0142\u00f3w w [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[881,205,9],"class_list":["post-6781","post","type-post","status-publish","format-standard","hentry","category-how-to","tag-apps-web-apps","tag-programming","tag-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/posts\/6781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/comments?post=6781"}],"version-history":[{"count":1,"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/posts\/6781\/revisions"}],"predecessor-version":[{"id":6782,"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/posts\/6781\/revisions\/6782"}],"wp:attachment":[{"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/media?parent=6781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/categories?post=6781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/howtogeek.blog\/pl\/wp-json\/wp\/v2\/tags?post=6781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}