<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jelena Petkovic</title>
    <description>The latest articles on DEV Community by Jelena Petkovic (@jelena_petkovic).</description>
    <link>https://dev.to/jelena_petkovic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2069286%2F20970d75-2503-45c8-a112-3fb28c028da5.jpg</url>
      <title>DEV Community: Jelena Petkovic</title>
      <link>https://dev.to/jelena_petkovic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jelena_petkovic"/>
    <language>en</language>
    <item>
      <title>Sve što treba da znate o `FormData` objektu u JavaScript-u</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Thu, 21 Nov 2024 13:47:12 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/sve-sto-treba-da-znate-o-formdata-objektu-u-javascript-u-4n87</link>
      <guid>https://dev.to/jelena_petkovic/sve-sto-treba-da-znate-o-formdata-objektu-u-javascript-u-4n87</guid>
      <description>&lt;p&gt;Kada radite sa podacima iz HTML formi u JavaScript-u, često se susrećete sa potrebom za prikupljanjem, manipulisanjem i slanjem tih podataka na server. Ovde na scenu stupa &lt;code&gt;FormData&lt;/code&gt; — moćan i fleksibilan API za upravljanje formama. U ovom postu ćemo detaljno objasniti kako &lt;code&gt;FormData&lt;/code&gt; funkcioniše, njegove prednosti i kako ga možete koristiti u stvarnim scenarijima.&lt;/p&gt;




&lt;h2&gt;
  
  
  Šta je &lt;code&gt;FormData&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;FormData&lt;/code&gt; je ugrađeni JavaScript objekat koji omogućava:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Jednostavno prikupljanje podataka iz HTML formi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Slanje tih podataka serveru koristeći &lt;code&gt;fetch&lt;/code&gt; API ili &lt;code&gt;XMLHttpRequest&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rad sa binarnim podacima, poput fajlova.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ovaj objekat automatski formatira podatke u skladu sa MIME tipom &lt;code&gt;multipart/form-data&lt;/code&gt;, što ga čini idealnim za slanje složenih podataka, uključujući fajlove.&lt;/p&gt;




&lt;h2&gt;
  
  
  Kako kreirati &lt;code&gt;FormData&lt;/code&gt; objekat?
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Kreiranje praznog &lt;code&gt;FormData&lt;/code&gt; objekta
&lt;/h4&gt;

&lt;p&gt;Ako želite ručno da dodate podatke, koristite prazan &lt;code&gt;FormData&lt;/code&gt; konstruktor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jelena&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jelena@example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Kreiranje &lt;code&gt;FormData&lt;/code&gt; objekta iz forme
&lt;/h4&gt;

&lt;p&gt;Ako imate HTML formu, možete direktno proslediti referencu forme &lt;code&gt;FormData&lt;/code&gt; konstruktoru, što će automatski prikupiti sve podatke iz nje.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;registrationForm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Dodavanje podataka
&lt;/h2&gt;

&lt;p&gt;Podaci se dodaju pomoću metode &lt;code&gt;.append(key, value)&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;firstName&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jelena&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lastName&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Petković&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ako dodajete fajl iz &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt;, prosto koristite &lt;code&gt;.files[0]&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fileInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;profilePicture&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;profilePicture&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fileInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Čitanje podataka
&lt;/h2&gt;

&lt;p&gt;Da biste iterirali kroz podatke u &lt;code&gt;FormData&lt;/code&gt; objektu, koristite &lt;code&gt;for...of&lt;/code&gt; petlju zajedno sa &lt;code&gt;.entries()&lt;/code&gt; metodom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Slanje &lt;code&gt;FormData&lt;/code&gt; podataka na server
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;FormData&lt;/code&gt; je idealan za slanje podataka serveru pomoću &lt;code&gt;fetch&lt;/code&gt; API-ja. Evo jednostavnog primera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com/api/register&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Automatski formatiran kao multipart/form-data&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Uspešno registrovano:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Greška:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nema potrebe za ručnim postavljanjem &lt;code&gt;Content-Type&lt;/code&gt; zaglavlja; &lt;code&gt;FormData&lt;/code&gt; to automatski radi.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Prednosti &lt;code&gt;FormData&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rad sa fajlovima&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;FormData&lt;/code&gt; omogućava lako dodavanje i slanje fajlova direktno iz &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; polja.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatska serializacija&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Umesto da ručno formatirate podatke, &lt;code&gt;FormData&lt;/code&gt; ih automatski formatira u &lt;code&gt;multipart/form-data&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fleksibilnost&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Lako upravljanje parovima ključeva i vrednosti, uključujući mogućnost iteracije i ažuriranja podataka.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Podrška za binarne podatke&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Idealan je za slanje binarnih podataka poput slika, PDF-ova ili drugih fajlova.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Primer iz prakse: Registraciona forma
&lt;/h2&gt;

&lt;p&gt;Evo jednog kompletnog primera gde prikupljamo podatke iz forme i šaljemo ih serveru:&lt;/p&gt;

&lt;h4&gt;
  
  
  HTML Forma
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"registrationForm"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"username"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Korisničko ime:&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"username"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"username"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Email:&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"profilePicture"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Profilna slika:&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"profilePicture"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"profilePicture"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Registruj se&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  JavaScript Kod
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;registrationForm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Sprečava reload stranice&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com/api/register&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Uspešno registrovano:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Greška:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Korisni saveti
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ako želite da ručno modifikujete podatke, koristite &lt;code&gt;.set(key, value)&lt;/code&gt; umesto &lt;code&gt;.append()&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Možete proveriti da li određeni ključ postoji pomoću &lt;code&gt;.has(key)&lt;/code&gt; metode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Za uklanjanje podataka koristite &lt;code&gt;.delete(key)&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Zaključak
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;FormData&lt;/code&gt; je moćan alat za rad sa podacima iz formi. Omogućava lako prikupljanje, manipulaciju i slanje podataka, čak i kada radite sa fajlovima. Njegova fleksibilnost i jednostavna integracija sa modernim JavaScript API-jima čine ga nezamenjivim za mnoge web aplikacije.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>formdata</category>
    </item>
    <item>
      <title>Kako rešiti probleme sa specifičnim stilovima za različite pretraživače</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Fri, 15 Nov 2024 12:46:55 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/kako-resiti-probleme-sa-specificnim-stilovima-za-razlicite-pretrazivace-3iak</link>
      <guid>https://dev.to/jelena_petkovic/kako-resiti-probleme-sa-specificnim-stilovima-za-razlicite-pretrazivace-3iak</guid>
      <description>&lt;p&gt;Prilikom izrade web stranica, često se suočavamo sa problemima u vezi sa specifičnim stilovima koji se pojavljuju samo na određenim pretraživačima. Iako svi pretraživači renderuju HTML i CSS na sličan način, postoje sitne razlike koje mogu dovesti do toga da stranica izgleda ili funkcioniše različito u Chrome-u, Firefox-u, Safari-u ili Internet Explorer-u. Srećom, postoji nekoliko tehnika koje mogu pomoći da rešimo ove probleme i obezbedimo dosledno korisničko iskustvo na svim platformama.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;strong&gt;Identifikuj problematični pretraživač&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Prvi korak je da testiramo svoj sajt na različitim pretraživačima i uređajima kako bi otkrili koji tačno pretraživač pravi problem.&lt;/p&gt;

&lt;p&gt;Najčešći problemi sa kompatibilnošću javljaće se na starijim verzijama Internet Explorer-a, Safari-u ili nekim specifičnim verzijama Firefox-a.&lt;/p&gt;

&lt;p&gt;Možemo koristiti alate kao što je &lt;strong&gt;BrowserStack&lt;/strong&gt; koji omogućava testiranje sajta na raznim pretraživačima i uređajima.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;strong&gt;Koristiti zasebne stilove za specifične pretraživače (kondicionalni stilovi)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Jedna od najjednostavnijih tehnika je korišćenje &lt;strong&gt;kondicionalnih stilova&lt;/strong&gt; koji se učitavaju samo za određene pretraživače. Ovaj pristup omogućava nam da ciljamo određene pretraživače i primenimo specifične stilove samo za njih.&lt;/p&gt;

&lt;p&gt;Na primer, ako želimo da dodamo specifične stilove samo za &lt;strong&gt;Internet Explorer 9&lt;/strong&gt; i starije verzije, možemo koristiti sledeći HTML kod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Za Internet Explorer 9 i starije verzije --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!--[if IE 9]&amp;gt;
&amp;lt;link rel="stylesheet" type="text/css" href="ie9.css"&amp;gt;
&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ovaj kod omogućava učitavanje stila &lt;code&gt;ie9.css&lt;/code&gt; samo za korisnike koji koriste Internet Explorer 9 ili starije verzije.&lt;br&gt;
Na taj način, možemo targetirati samo one elemente koji prouzrokuju problem u tom pretraživaču, bez uticaja na ostale.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. &lt;strong&gt;Koristiti CSS framework-e kao što je Bootstrap&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ako želimo da izbegnemo previše manuelnog podešavanja za različite pretraživače, najbolja opcija je da koristimo &lt;strong&gt;CSS framework&lt;/strong&gt; poput &lt;strong&gt;Bootstrap-a&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Framework-i kao što je Bootstrap već imaju rešenja za mnoge probleme sa kompatibilnošću među pretraživačima.&lt;/p&gt;

&lt;p&gt;Korišćenjem framework-a, dobijamo unapred postavljene stilove koji su testirani na više pretraživača i uređaja, što može značajno uštedeti vreme i trud.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. &lt;strong&gt;Koristiti Autoprefixer&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Autoprefixer&lt;/strong&gt; je alat koji automatski dodaje potrebne &lt;strong&gt;vendor prefikse&lt;/strong&gt; za CSS svojstva.&lt;/p&gt;

&lt;p&gt;Različiti pretraživači često zahtevaju različite prefikse za određena CSS svojstva kako bi ih podržali, kao što su:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-webkit-&lt;/code&gt; za Chrome i Safari,&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-moz-&lt;/code&gt; za Firefox,&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-ms-&lt;/code&gt; za Internet Explorer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Na primer, ako koristimo CSS za transformaciju elementa, neki pretraživači mogu zahtevati prefiks &lt;code&gt;-webkit-&lt;/code&gt; dok drugi ne.&lt;br&gt;
Sa Autoprefixer-om, ne moramo ručno dodavati ove prefikse – on će automatski dodati pravi prefiks za svaki pretraživač.&lt;/p&gt;

&lt;p&gt;Evo kako bi izgledao primer bez i sa Autoprefixer-om:&lt;/p&gt;

&lt;p&gt;Bez Autoprefixer-a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;45deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sa Autoprefixer-om:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;45deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;/* Safari i Chrome */&lt;/span&gt;
  &lt;span class="nl"&gt;-moz-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;45deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;/* Firefox */&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;45deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;/* Moderni browseri */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. &lt;strong&gt;Koristi Reset CSS ili Normalize.css&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Jedan od čestih problema sa kompatibilnošću između pretraživača su &lt;strong&gt;podrazumevani stilovi&lt;/strong&gt; koji se primenjuju na HTML elemente. Na primer, neki pretraživači mogu podrazumevano dodati margine ili padding na &lt;code&gt;h1&lt;/code&gt; elemente, dok drugi ne.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reset CSS&lt;/strong&gt; i &lt;strong&gt;Normalize.css&lt;/strong&gt; su skupovi stilova koji resetuju ili standardizuju ove podrazumevane vrednosti, omogućavajući nam da imamo čistiji i dosledniji osnovni izgled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Normalize.css&lt;/strong&gt; je često bolja opcija od kompletnog resetovanja stila, jer samo standardizuje razlike među pretraživačima, zadržava korisne podrazumevane stilove, čineći dizajn konzistentnijim između različitih pretraživača bez prekomernog uklanjanja. Ovaj pristup je modularniji i lakši za debagovanje, ali manje "agresivan" u odnosu na resetovanje stilova.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reset CSS&lt;/strong&gt; potpuno uklanja sve podrazumevane stilove koje pretraživači primenjuju i vraća elemente u početno stanje, omogućavajući developerima da počnu sa "čistom" osnovom. Ovim pristupom može nam biti teško debagovanje i održavanje zbog velikih lanaca selektora. &lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;strong&gt;PostCSS i plugin-ovi za kompatibilnost&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ako koristimo &lt;strong&gt;PostCSS&lt;/strong&gt; ili slične biblioteke za CSS, možemo koristiti &lt;strong&gt;plugin-ove&lt;/strong&gt; koji omogućavaju korišćenje moderne CSS sintakse. &lt;/p&gt;

&lt;p&gt;Na primer, neki plugin-ovi omogućavaju korišćenje novih CSS funkcionalnosti koje nisu još podržane u svim pretraživačima, ali će biti automatski transpile-ovane u stariju verziju koda koja je kompatibilna sa svim pretraživačima.&lt;/p&gt;




&lt;h3&gt;
  
  
  Zaključak
&lt;/h3&gt;

&lt;p&gt;Rešavanje problema sa specifičnim pretraživačima zahteva korišćenje više tehnika i alata, kako bi se osigurao dosledan izgled i funkcionalnost sajta na svim platformama.&lt;br&gt;
Kombinovanjem alata kao što su &lt;strong&gt;Autoprefixer&lt;/strong&gt;, &lt;strong&gt;Normalize.css&lt;/strong&gt;, i &lt;strong&gt;CSS framework-ovi&lt;/strong&gt; poput &lt;strong&gt;Bootstrap-a&lt;/strong&gt;, možemo značajno pojednostaviti ovaj proces i eliminisati mnoge probleme sa kompatibilnošću. &lt;br&gt;
Pored toga, korišćenje &lt;strong&gt;kondicionalnih stilova&lt;/strong&gt; i &lt;strong&gt;specifičnih rešenja&lt;/strong&gt; za starije verzije pretraživača, pomoćiće da sajt izgleda i funkcioniše kako treba, bez obzira na uređaj ili pretraživač koji korisnici koriste.&lt;/p&gt;

</description>
      <category>css</category>
      <category>javascript</category>
      <category>browser</category>
      <category>html</category>
    </item>
    <item>
      <title>Progresivno renderovanje: poboljšanje performansi prikaza sadržaja</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Thu, 14 Nov 2024 18:36:48 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/progresivno-renderovanje-poboljsanje-performansi-prikaza-sadrzaja-lbp</link>
      <guid>https://dev.to/jelena_petkovic/progresivno-renderovanje-poboljsanje-performansi-prikaza-sadrzaja-lbp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Progresivno renderovanje&lt;/strong&gt; je skup tehnika koje se koriste za poboljšanje performansi web stranice, posebno u smislu brzine prikaza sadržaja korisnicima. Delovi stranice se prikazuju i učitavaju postepeno, umesto da se cela stranica učitava odjednom. Cilj je da se sadržaj što pre prikaže, čime se poboljšava &lt;strong&gt;perceptivno vreme učitavanja&lt;/strong&gt; – vreme tokom kog korisnik doživljava da se stranica učitava.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prednosti progresivnog renderovanja
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Brže vreme prikaza&lt;/strong&gt; - Korisnici brže vide prvi sadržaj, što poboljšava korisničko iskustvo, posebno na sporijim mrežama.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimizacija za slabije uređaje&lt;/strong&gt; - Manje moćni uređaji mogu lakše prikazati inicijalni sadržaj bez zastoja.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SEO koristi&lt;/strong&gt; - Pretraživači indeksiraju inicijalno učitane elemente, što pomaže u boljem rangiranju stranice.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Tehnike za progresivno renderovanje
&lt;/h2&gt;

&lt;p&gt;Tehnike koje se koriste za progresivno renderovanje uključuju &lt;strong&gt;lazy loading&lt;/strong&gt; za slike i druge resurse, &lt;strong&gt;server-side rendering&lt;/strong&gt; (SSR) i &lt;strong&gt;client-side hydration&lt;/strong&gt; kod SPA aplikacija.&lt;/p&gt;

&lt;p&gt;Iako je progresivno renderovanje bilo posebno važno u danima kada je internet bio sporiji, ono je i dalje korisno u današnjem razvoju zbog široke upotrebe mobilnih mreža koje mogu biti nepouzdane. Evo nekoliko tehnika koje se koriste za progresivno renderovanje.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Lenjo učitavanje slika (Lazy loading)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;U ovoj tehnici, slike na stranici se ne učitavaju sve odjednom. Umesto toga, slike se učitavaju tek kada korisnik skroluje do dela stranice gde se slika nalazi. Na taj način, resursi se koriste ekonomičnije, a stranica se učitava brže jer se prvo prikaže samo najvažniji sadržaj.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Moderno lenjo učitavanje:&lt;/strong&gt; HTML sada podržava atribut &lt;code&gt;loading="lazy"&lt;/code&gt; za &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; elemente, kojim se browseru poručuje da odloži učitavanje slika koje su izvan vidljivog dela stranice sve dok korisnik ne skroluje blizu njih. Na primer:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image.jpg"&lt;/span&gt; &lt;span class="na"&gt;loading=&lt;/span&gt;&lt;span class="s"&gt;"lazy"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Opis slike"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript praćenje skrolovanja:&lt;/strong&gt; Možete koristiti JavaScript kako biste pratili poziciju skrola, i kada slika dođe blizu vidljivog dela ekrana, učitavanje slike može da se aktivira u tom trenutku (poređenjem koordinata slike sa trenutnom pozicijom skrola).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Prioritet za vidljiv sadržaj (Rendering sadržaja iznad preklopa)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Pod "sadržajem iznad preklopa" podrazumevamo sadržaj koji je odmah vidljiv u pretraživaču bez skrolovanja. Da bi stranica što brže prikazala ovaj ključni sadržaj, potrebno je učitati samo neophodne resurse kao što su osnovni CSS i skripte za početno prikazivanje stranice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimizovanje resursa:&lt;/strong&gt; Prilikom učitavanja stranice, trebalo bi uključiti samo minimalne količine CSS-a, sadržaja i skripti koji su neophodni za prikazivanje prvog dela stranice. Ostali resursi mogu biti odloženi koristeći skripte sa oznakom &lt;code&gt;defer&lt;/code&gt; ili kroz praćenje događaja kao što su &lt;code&gt;DOMContentLoaded&lt;/code&gt; ili &lt;code&gt;load&lt;/code&gt;, kako bi se dodatni resursi učitali nakon početnog prikaza.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Asinhroni HTML fragmenti&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ova tehnika omogućava serveru da pošalje deo HTML-a ka pretraživaču kako bi stranica mogla da se renderuje odmah, dok se preostali delovi učitavaju sukcesivno. Ovakav pristup je posebno koristan za dinamičke stranice gde sadržaj dolazi sa servera – prvo se prikazuje deo stranice, dok se ostali delovi naknadno dopunjuju.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Preload i prefetching resursa&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Korišćenje &lt;code&gt;&amp;lt;link rel="preload"&amp;gt;&lt;/code&gt; ili &lt;code&gt;&amp;lt;link rel="prefetch"&amp;gt;&lt;/code&gt; za učitavanje kritičnih resursa kao što su stilovi, skripte ili fontovi pre nego što postanu potrebni. Ovo omogućava brže učitavanje sadržaja, posebno za resurse koji nisu odmah potrebni, ali se koriste kasnije na stranici.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Code splitting i dinamičko učitavanje JavaScript-a&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Razbijanje JavaScript koda u manje delove (chunke) koji se učitavaju samo kada su potrebni, čime se smanjuje početni volumen podataka koji se preuzima.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. &lt;strong&gt;CSS kritična putanja (Critical CSS)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Izolovanje i učitavanje samo najvažnijeg CSS-a za inicijalni prikaz stranice, dok se ostatak može učitati asinhrono. Ovo omogućava brže prikazivanje vizuelnog sadržaja, dok se ostatak stranice učitava u pozadini.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. &lt;strong&gt;Server-Side Rendering (SSR) i Static Site Generation (SSG)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Renderovanje delova stranice na serveru pre nego što se pošalju korisniku. Ovo omogućava da korisnici odmah vide sadržaj bez čekanja na JavaScript učitavanje, čime se postiže bolja performansa i SEO.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. &lt;strong&gt;Progressive Web Apps (PWA)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Korisćenje tehnologije PWA omogućava učitavanje i pristupanje aplikaciji i kada korisnik nije online, čime se smanjuje opterećenje mreže i omogućava brzo učitavanje sadržaja čak i u uslovima lošije internet konekcije.&lt;/p&gt;




&lt;h2&gt;
  
  
  Zaključak
&lt;/h2&gt;

&lt;p&gt;Progresivno renderovanje pomaže u postizanju bržeg prikaza sadržaja, čime se smanjuje percepcija vremena učitavanja. Bez obzira na sve brže internet veze, ove tehnike su i dalje korisne zbog povećane upotrebe mobilnih uređaja i promenljivog kvaliteta mobilnih mreža. Na taj način korisnicima pružate bolje iskustvo, uz brži pristup najvažnijim informacijama na vašoj stranici.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>performance</category>
    </item>
    <item>
      <title>Razumevanje funkcija višeg reda (Higher-Order Functions) u JavaScript-u</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Thu, 14 Nov 2024 15:32:59 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/razumevanje-funkcija-viseg-reda-higher-order-functions-u-javascript-u-5832</link>
      <guid>https://dev.to/jelena_petkovic/razumevanje-funkcija-viseg-reda-higher-order-functions-u-javascript-u-5832</guid>
      <description>&lt;p&gt;Ako učite JavaScript, verovatno ste naišli na pojam &lt;strong&gt;Funkcija Višeg Reda&lt;/strong&gt; (Higher-Order Functions). Iako zvuči složeno, nije toliko komplikovano. JavaScript, kao funkcionalni programski jezik, omogućava korišćenje ovih funkcija, koje su ključne u programiranju zasnovanom na funkcijama.&lt;/p&gt;

&lt;h4&gt;
  
  
  Funkcionalno Programiranje
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Funkcionalno programiranje&lt;/strong&gt; podrazumeva kreiranje i korišćenje funkcija kao primarnih gradivnih elemenata. U ovom pristupu, funkcije se mogu prosleđivati kao parametri drugim funkcijama ili vraćati kao rezultati. Ovaj način razmišljanja omogućava organizovano i efikasno pisanje koda.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prvoklasne Funkcije
&lt;/h4&gt;

&lt;p&gt;JavaScript tretira funkcije kao "prvoklasne građane". To znači da su funkcije objekti — specifična vrsta objekata koji se mogu dodeljivati promenljivama, prosleđivati kao parametri i koristiti u različitim kontekstima, kao što je slučaj sa brojevima ili stringovima.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primer&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pozdrav&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Zdravo, svete!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;pozdrav&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  &lt;span class="c1"&gt;// Ispisuje 'Zdravo, svete!'&lt;/span&gt;

&lt;span class="c1"&gt;// Dodavanje svojstva funkciji&lt;/span&gt;
&lt;span class="nx"&gt;pozdrav&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;jezik&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;srpski&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pozdrav&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;jezik&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Ispisuje 'srpski'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Dodeljivanje Funkcija Promenljivama
&lt;/h4&gt;

&lt;p&gt;U JavaScriptu, funkcije se mogu dodeljivati promenljivama:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kvadrat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kvadrat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;  &lt;span class="c1"&gt;// Ispisuje 25&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Prosleđivanje Funkcija kao Parametara
&lt;/h4&gt;

&lt;p&gt;Jedna od glavnih karakteristika prvoklasnih funkcija je mogućnost da se proslede kao argumenti drugim funkcijama:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;formalniPozdrav&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Kako ste?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;neformalniPozdrav&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Šta ima?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pozdravVrsta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vrsta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formalan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;neformalan&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vrsta&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;formalan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;formalan&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vrsta&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;neformalan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;neformalan&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;pozdravVrsta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;neformalan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formalniPozdrav&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;neformalniPozdrav&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Ispisuje 'Šta ima?'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Funkcije Višeg Reda
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Funkcije Višeg Reda&lt;/strong&gt; su funkcije koje prihvataju druge funkcije kao argumente ili ih vraćaju kao rezultate. Ovo omogućava elegantnije i sažetije pisanje koda. Primeri uključuju metode &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt; i &lt;code&gt;reduce&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;map&lt;/code&gt; Metod
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;map&lt;/code&gt; kreira novi niz tako što poziva funkciju na svakom elementu postojećeg niza:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bez &lt;code&gt;map&lt;/code&gt; metode&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;arr2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// [20, 40, 60, 80, 100]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Sa &lt;code&gt;map&lt;/code&gt; metodom&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// [20, 40, 60, 8-, 100]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;filter&lt;/code&gt; Metod
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;filter&lt;/code&gt; stvara novi niz sa svim elementima koji zadovoljavaju zadati uslov:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;osobe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pera&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;godine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mika&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;godine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Laza&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;godine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ana&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;godine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;punoletni&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;osobe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;osoba&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;osoba&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;godine&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;punoletni&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// [ { ime: 'Mika', godine: 18 }, { ime: 'Laza', godine: 64 } ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;reduce&lt;/code&gt; Metod
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;reduce&lt;/code&gt; izvršava funkciju na svakom članu niza i vraća jedinstvenu vrednost:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primer sa &lt;code&gt;reduce&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;akumulator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vrednost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;akumulator&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;vrednost&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// 50&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Kreiranje Funkcije Višeg Reda
&lt;/h4&gt;

&lt;p&gt;Zamislite da JavaScript nema ugrađenu &lt;code&gt;map&lt;/code&gt; metodu. Možemo sami da je kreiramo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mapiraj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;noviNiz&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;noviNiz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;noviNiz&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;duzine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mapiraj&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JavaScript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Python&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;duzine&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// [10, 6]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Zaključak
&lt;/h3&gt;

&lt;p&gt;Funkcije Višeg Reda omogućavaju fleksibilnost i jednostavnost koda u JavaScriptu. Korišćenjem ovih funkcija, naš kod postaje sažetiji, organizovaniji i lakši za održavanje.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>functional</category>
    </item>
    <item>
      <title>Uvod u Modularizaciju u React-u: AMD i CommonJS modularizacija</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Wed, 06 Nov 2024 17:55:04 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/uvod-u-modularizaciju-u-react-u-amd-i-commonjs-modularizacija-28h3</link>
      <guid>https://dev.to/jelena_petkovic/uvod-u-modularizaciju-u-react-u-amd-i-commonjs-modularizacija-28h3</guid>
      <description>&lt;p&gt;Modularizacija je srce modernog razvoja aplikacija, naročito kada radimo sa bibliotekama poput React-a. Razumevanje modularizacije i različitih pristupa modularizaciji kao što su AMD i CommonJS je ključ za razvoj efikasnog, održivog i skalabilnog koda. U ovom blog postu, istražićemo kako funkcioniše modularizacija u React aplikacijama, zašto je važna i kako AMD i CommonJS pristupi modularizaciji doprinose efikasnosti JavaScript aplikacija.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zašto je modularizacija ključna za React aplikacije?
&lt;/h3&gt;

&lt;p&gt;Kada radimo sa React-om, modularizacija nam omogućava da razbijemo naš korisnički interfejs na manje delove – komponente – koje funkcionišu kao nezavisne jedinice. U suštini, svaka komponenta predstavlja deo korisničkog interfejsa sa sopstvenim stilovima, funkcionalnostima i zavisnostima, što aplikaciju čini preglednijom i olakšava njen razvoj i održavanje.&lt;/p&gt;

&lt;p&gt;Modularizacija takođe pomaže u smanjenju rizika od konflikata između različitih delova koda, jer svaka komponenta može da funkcioniše nezavisno, koristeći sopstvene module i resurse. Tako dolazimo do važnosti modularizacije u React aplikacijama: svaka komponenta može biti definisana kao zasebni modul, što pojednostavljuje upravljanje zavisnostima i omogućava timskom radu da teče glatko i bez ometanja.&lt;/p&gt;

&lt;h4&gt;
  
  
  Struktura modula u React-u
&lt;/h4&gt;

&lt;p&gt;React aplikacije obično prate strukturu foldera koja grupiše srodne komponente i resurse. Recimo da pravimo jednostavnu aplikaciju sa nekoliko stranica kao što su &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;About&lt;/code&gt; i &lt;code&gt;Contact&lt;/code&gt;. Umesto da sve stranice definišemo u jednom fajlu, možemo ih modularizovati tako da svaki fajl predstavlja jednu komponentu. Evo primera kako bi to izgledalo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Home.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// About.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;About&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;About&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Contact.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Contact&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Contact&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kada je svaki deo aplikacije podeljen u nezavisne module (komponente), lako možemo ponovo koristiti ove delove i u drugim delovima aplikacije. Ovaj pristup pomaže da aplikacija ostane čista, lako održiva i skalabilna.&lt;/p&gt;

&lt;h3&gt;
  
  
  AMD i CommonJS modularizacija u JavaScript-u
&lt;/h3&gt;

&lt;p&gt;Dok su ES6 moduli standard u modernom JavaScript-u i često se koriste u React aplikacijama, postoje i drugi standardi koji su popularni u JavaScript svetu, poput &lt;strong&gt;AMD (Asynchronous Module Definition)&lt;/strong&gt; i &lt;strong&gt;CommonJS&lt;/strong&gt;. Iako nisu podjednako uobičajeni u React aplikacijama, razumevanje razlika između njih može pomoći kada radimo sa različitim JavaScript projektima, posebno onima koji se ne oslanjaju na React.&lt;/p&gt;

&lt;h4&gt;
  
  
  CommonJS
&lt;/h4&gt;

&lt;p&gt;CommonJS je modularizacija razvijena za server-side JavaScript okruženja, posebno za Node.js. Ovaj standard koristi &lt;code&gt;module.exports&lt;/code&gt; za eksportovanje modula i &lt;code&gt;require&lt;/code&gt; za njihovo učitavanje. Ključna karakteristika CommonJS-a je &lt;strong&gt;sinhronost&lt;/strong&gt;, što znači da se moduli učitavaju redom, i pogodan je za server-side okruženja gde je učitavanje modula sinhrono (redom) često efikasnije i bolje usklađeno sa zahtevima servera.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primer CommonJS modularizacije:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// math.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subtract&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// main.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;math&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./math&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;U CommonJS-u, sve što je potrebno za modul definišemo pomoću &lt;code&gt;module.exports&lt;/code&gt;. Kada želimo da koristimo modul, jednostavno ga &lt;code&gt;require&lt;/code&gt;-ujemo. Zbog ove jednostavnosti, CommonJS je najčešći standard za Node.js projekte i omogućava diveloperima da dele module kroz Node Package Manager (NPM).&lt;/p&gt;

&lt;h4&gt;
  
  
  AMD (Asynchronous Module Definition)
&lt;/h4&gt;

&lt;p&gt;Za razliku od CommonJS-a, AMD (Asynchronous Module Definition) standard koristi se pre svega u aplikacijama u brauzeru. Osmišljen je kako bi omogućio &lt;strong&gt;asinhrono&lt;/strong&gt; učitavanje modula, što je ključno za optimizaciju performansi brauzera. &lt;/p&gt;

&lt;p&gt;Kod asinhonog učitavanja, moduli se ne učitavaju redom, već se paralelno preuzimaju, smanjujući vreme čekanja i omogućavajući brže učitavanje stranica. AMD koristi funkciju &lt;code&gt;define&lt;/code&gt; za definisanje modula i funkciju &lt;code&gt;require&lt;/code&gt; za njihovo učitavanje.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primer AMD modularizacije:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// math.js&lt;/span&gt;
&lt;span class="nf"&gt;define&lt;/span&gt;&lt;span class="p"&gt;([],&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;subtract&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// main.js&lt;/span&gt;
&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;math&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;math&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 5&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AMD omogućava modularizaciju na način koji je idealan za okruženja gde su performanse i brzina učitavanja stranica od suštinskog značaja. Uzimajući u obzir da asinhonost omogućava efikasniju upotrebu resursa brauzera, AMD je popularan u velikim JavaScript aplikacijama koje zahtevaju brzo učitavanje i interaktivnost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Koje su glavne razlike između CommonJS i AMD modularizacije?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Primena&lt;/strong&gt;: CommonJS je idealan za server-side JavaScript aplikacije kao što je Node.js, dok je AMD dizajniran za aplikacije u brauzeru gde asinhonost može poboljšati performanse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sinhronost&lt;/strong&gt;: CommonJS moduli se učitavaju sinhrono, što znači da se svaki modul učitava redom. AMD, s druge strane, koristi asinhrono učitavanje, omogućavajući aplikacijama u brauzeru da se učitaju brže i koriste resurse efikasnije.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Složenost&lt;/strong&gt;: CommonJS koristi &lt;code&gt;require&lt;/code&gt; za učitavanje modula i &lt;code&gt;module.exports&lt;/code&gt; za eksport, što je prilično jednostavno. AMD koristi &lt;code&gt;define&lt;/code&gt; za definisanje i &lt;code&gt;require&lt;/code&gt; za učitavanje modula, što može zahtevati više koda, ali pruža veću fleksibilnost u brauzeru.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kompaktibilnost&lt;/strong&gt;: CommonJS radi dobro u Node.js okruženju, dok AMD pruža veću fleksibilnost u pretraživačima zbog asinhronog učitavanja. Ovo ih čini pogodnim za različite svrhe.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  AMD i CommonJS u React-u
&lt;/h3&gt;

&lt;p&gt;U React-u se AMD i CommonJS ne koriste toliko često jer su ES6 moduli (&lt;code&gt;import&lt;/code&gt; i &lt;code&gt;export&lt;/code&gt;) postali standardni način modularizacije. Ipak, poznavanje AMD i CommonJS modula može biti korisno kada radimo na projektima koji se ne oslanjaju na React, kao što su neke stare JavaScript aplikacije ili projekti zasnovani na Node.js.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zaključak
&lt;/h3&gt;

&lt;p&gt;Modularizacija koda omogućava izgradnju skalabilnih, organizovanih i efikasnih aplikacija. Iako se u React-u primarno koriste ES6 moduli, razumevanje AMD i CommonJS modularizacije može biti korisno kada radimo sa različitim JavaScript projektima i alatima. CommonJS je izvrstan za server-side aplikacije zbog sinhronog učitavanja, dok AMD omogućava brže učitavanje modula u brauzeru, čineći ga odličnim izborom za aplikacije u pretraživaču. &lt;/p&gt;

&lt;p&gt;Bez obzira na odabrani pristup, modularizacija je osnovna praksa u modernom JavaScript programiranju i donosi brojna poboljšanja u organizaciji, održavanju i performansama aplikacija.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>module</category>
      <category>react</category>
    </item>
    <item>
      <title>Sveobuhvatan Vodič za Čuvanje Podataka u JavaScript-u</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Tue, 01 Oct 2024 16:52:35 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/cuvanje-podataka-u-javascript-u-5hka</link>
      <guid>https://dev.to/jelena_petkovic/cuvanje-podataka-u-javascript-u-5hka</guid>
      <description>&lt;p&gt;U savremenom razvoju web aplikacija, efikasno čuvanje podataka na klijentskoj strani je ključno za poboljšanje korisničkog iskustva i performansi aplikacije. Ovaj post pruža detaljno objašnjenje različitih metoda čuvanja podataka u JavaScript-u, uključujući cookies, local storage, session storage i IndexedDB. Takođe ćemo pokriti najbolje prakse, bezbednost, performanse i reaktivne pristupe.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Cookies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kako funkcionišu Cookies?
&lt;/h3&gt;

&lt;p&gt;Cookies su male datoteke koje server šalje klijentskom pretraživaču, a koje se čuvaju lokalno na korisničkom uređaju. Koriste se za različite svrhe, uključujući autentifikaciju, praćenje sesija i čuvanje korisničkih preferencija.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gde se koristi Cookies?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autentifikaciju:&lt;/strong&gt; Cookies često čuvaju tokene za prijavu (npr. JWT) ili sesije, tako da korisnici ostaju prijavljeni čak i kada osveže stranicu ili posete sajt nakon nekog vremena.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Praćenje korisnika:&lt;/strong&gt; Koriste se za praćenje korisničkih aktivnosti na više sajtova (često za ciljanje oglasa ili analitiku).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalizacija:&lt;/strong&gt; Čuvanje korisničkih preferencija (npr. jezik sajta, tema) kako bi sajt mogao da prilagodi sadržaj sledeći put kada ga posetite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Primer upotrebe:&lt;/em&gt;&lt;br&gt;
Kada se korisnik prijavi na sajt, server može da pošalje cookie sa tokenom za sesiju. Svaki sledeći zahtev ka serveru koristi taj cookie za potvrdu identiteta.&lt;/p&gt;
&lt;h3&gt;
  
  
  Prednosti Cookies-a
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cookies mogu imati datum isteka, što znači da se automatski brišu kada više nisu potrebni. Ovo je korisno za čuvanje privremenih informacija.&lt;/li&gt;
&lt;li&gt;Cookies se šalju sa svakim HTTP zahtevom, što ih čini pogodnim za autentifikaciju korisnika i praćenje sesija.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Mane Cookies-a
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ograničeni su na otprilike 4KB po cookie-ju, što može biti nedovoljno za veće količine podataka.&lt;/li&gt;
&lt;li&gt;Prekomerna upotreba cookies-a može usporiti performanse, posebno ako se često šalju sa HTTP zahtevima.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Primer korišćenja Cookies-a
&lt;/h3&gt;

&lt;p&gt;Instalirajte biblioteku &lt;code&gt;js-cookie&lt;/code&gt; za lakše upravljanje cookies-ima:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;js-cookie
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Cookies&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;js-cookie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Čuvanje korisničkog imena 7 dana&lt;/span&gt;
&lt;span class="nx"&gt;Cookies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jelena&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;expires&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Čitanje korisničkog imena&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Cookies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Brisanje korisničkog imena&lt;/span&gt;
&lt;span class="nx"&gt;Cookies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Local Storage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kako funkcioniše Local Storage?
&lt;/h3&gt;

&lt;p&gt;Local storage omogućava čuvanje podataka u klijentskom pretraživaču bez datuma isteka. Ovo znači da podaci ostaju dostupni između sesija, što ga čini idealnim za dugotrajne informacije.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gde se koristi Local Storage?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Čuvanje podataka koji treba da traju duže:&lt;/strong&gt; Može se koristiti za čuvanje podataka koji ostaju sačuvani i nakon zatvaranja prozora bruzera, poput korisničkih preferencija ili postavki sajta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keširanje podataka:&lt;/strong&gt; Može se koristiti za keširanje odgovora sa servera ili sadržaja kako bi se smanjio broj zahteva prilikom ponovnih poseta sajtu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Primer upotrebe:&lt;/em&gt;&lt;br&gt;
Aplikacija za upravljanje zadacima može čuvati listu zadataka u localStorage, tako da se zadržavaju i nakon što korisnik zatvori ili osveži stranicu.&lt;/p&gt;
&lt;h3&gt;
  
  
  Prednosti Local Storage-a
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Local storage može da čuva do 5-10MB podataka, što je znatno više od cookies-a.&lt;/li&gt;
&lt;li&gt;Podaci ostaju dostupni između sesija, čime se omogućava dugotrajno skladištenje informacija.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Mane Local Storage-a
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Local storage ne može slati podatke sa HTTP zahtevima, što ga čini manje pogodnim za autentifikaciju.&lt;/li&gt;
&lt;li&gt;Podaci nisu enkriptovani i lako su dostupni putem JavaScript-a, što može predstavljati rizik.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Primer korišćenja Local Storage-a
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Čuvanje korisničkog imena&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jelena&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Čitanje korisničkog imena&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Brisanje korisničkog imena&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Session Storage
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Kako funkcioniše Session Storage?
&lt;/h3&gt;

&lt;p&gt;Session storage je sličan local storage-u, ali se podaci čuvaju samo za vreme trajanja sesije. Kada se prozori zatvore, podaci se brišu, čime se osigurava privatnost.&lt;/p&gt;
&lt;h3&gt;
  
  
  Gde se koristi Session Storage?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privremeno čuvanje korisničkih podataka:&lt;/strong&gt; Na primer, ako korisnik popunjava višeformni obrazac kroz više stranica, sessionStorage se može koristiti za čuvanje unosa korisnika između stranica.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privremeno stanje aplikacije:&lt;/strong&gt; Kada je potrebno čuvati podatke dok korisnik ne osveži ili zatvori stranicu, na primer za pamćenje korisničkih akcija koje su relevantne samo tokom trenutne posete sajtu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Primer upotrebe:&lt;/em&gt;&lt;br&gt;
Kod online prodavnica, podaci o artiklima u korpi mogu se čuvati u sessionStorage dok korisnik ne dovrši proces kupovine. Kada zatvori tab, podaci se brišu.&lt;/p&gt;
&lt;h3&gt;
  
  
  Prednosti Session Storage-a
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Podaci se ne čuvaju između sesija, što je idealno za privremene informacije.&lt;/li&gt;
&lt;li&gt;Kao i local storage, session storage ima kapacitet 5-10MB.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Mane Session Storage-a
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ne može se koristiti za dugotrajno skladištenje podataka, što ga čini manje pogodnim za aplikacije koje zahtevaju trajno čuvanje informacija.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Primer korišćenja Session Storage-a
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Čuvanje korisničkog imena&lt;/span&gt;
&lt;span class="nx"&gt;sessionStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jelena&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Čitanje korisničkog imena&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sessionStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Brisanje korisničkog imena&lt;/span&gt;
&lt;span class="nx"&gt;sessionStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. IndexedDB
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Kako funkcioniše IndexedDB?
&lt;/h3&gt;

&lt;p&gt;IndexedDB asinhrona baza podataka sa ključevima i vrednostima, zasnovana na objektima koja omogućava skladištenje velike količine podataka direktno u korisnikovom pregledaču. Podaci se čuvaju u indeksiranoj bazi, što omogućava brzo pretraživanje i organizaciju. Podaci se organizuju u objektne prodavnice (object stores) koje su slične tabelama u SQL bazama podataka. Svaka objektna prodavnica ima kolekciju zapisa gde se svaki zapis identifikuje putem ključa. IndexedDB je JavaScript API i deo je standarda HTML5, te je podržan u većini modernih pregledača.&lt;/p&gt;
&lt;h3&gt;
  
  
  Gde se koristi IndexedDB?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web aplikacije koje rade offline:&lt;/strong&gt; IndexedDB omogućava aplikacijama da nastave da rade čak i kada nema internet konekcije tako što omogućava čuvanje podataka lokalno.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Složeni podaci:&lt;/strong&gt; Može da se koristi za čuvanje složenih struktura podataka poput objekata, nizova, i binarnih podataka, što je pogodno za aplikacije koje rade sa velikim količinama podataka.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keširanje podataka:&lt;/strong&gt; Može da služi za keširanje podataka radi ubrzavanja učitavanja i smanjenja opterećenja servera.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progresivne web aplikacije (PWA):&lt;/strong&gt; IndexedDB je često korišćen u PWA aplikacijama za sinhronizaciju podataka i podršku za offline rad.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Osnovni koncepti i operacije u IndexedDB:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Baza podataka (Database):&lt;/strong&gt; Sadrži više objektnih prodavnica.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Objektna prodavnica (Object Store):&lt;/strong&gt; Sadrži podatke kao što su objekti ili druge strukture podataka.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transakcije (Transaction):&lt;/strong&gt; Svaka operacija nad bazom podataka (čitanje, pisanje) mora biti unutar transakcije.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indeksi (Indexes):&lt;/strong&gt; Koriste se za efikasnije pretraživanje podataka unutar objektne prodavnice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ključevi (Keys):&lt;/strong&gt; Identifikuju svaki zapis unutar objektne prodavnice.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Prednosti IndexedDB?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Može da skladišti veće količine podataka (do nekoliko GB) u poređenju sa drugim opcijama kao što su LocalStorage ili SessionStorage.&lt;/li&gt;
&lt;li&gt;Podržava čuvanje kompleksnih struktura podataka kao što su objekti, slike, video zapisi i druge vrste binarnih podataka.&lt;/li&gt;
&lt;li&gt;Većina operacija je asinhrona, što omogućava da se aplikacije ne blokiraju dok se podaci čitaju ili pišu.&lt;/li&gt;
&lt;li&gt;Podržava transakcijski model koji osigurava integritet podataka i omogućava rollback u slučaju greške.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Mane IndexedDB-a
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API za IndexedDB je komplikovaniji od drugih metoda, što može zahtevati više vremena za učenje i implementaciju.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Primer korišćenja IndexedDB-a
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Otvaranje ili kreiranje baze podataka&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;indexedDB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MyDatabase&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Event handler za kreiranje novih objektnih prodavnica&lt;/span&gt;
&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onupgradeneeded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// Kreiranje objektne prodavnice sa ključem po imenu&lt;/span&gt;
    &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createObjectStore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;keyPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Event handler za uspešno otvaranje baze&lt;/span&gt;
&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onsuccess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Kreiranje transakcije i pristupanje objektnoj prodavnici&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;readwrite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;objectStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objectStore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Dodavanje podataka&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;addRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;objectStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jelena&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;addRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onsuccess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Podatak uspešno dodat&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="c1"&gt;// Čitanje podataka&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;getRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;objectStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;getRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onsuccess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pročitani podaci:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onerror&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Greška prilikom otvaranja baze&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  Najbolje Prakse za Korišćenje
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Cookies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimalizujte podatke:&lt;/strong&gt; Čuvajte samo neophodne informacije da biste smanjili veličinu cookies-a.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sigurnost:&lt;/strong&gt; Koristite &lt;code&gt;Secure&lt;/code&gt; i &lt;code&gt;HttpOnly&lt;/code&gt; atribute kako biste zaštitili cookies od neovlašćenog pristupa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smanjite trajanje:&lt;/strong&gt; Postavite razuman datum isteka kako biste smanjili rizik od zastarelih podataka.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Local i Session Storage
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JSON.stringify() i JSON.parse():&lt;/strong&gt; Kada čuvate složene objekte, koristite &lt;code&gt;JSON.stringify()&lt;/code&gt; za konverziju objekta u string prilikom čuvanja i &lt;code&gt;JSON.parse()&lt;/code&gt; prilikom čitanja.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organizacija podataka:&lt;/strong&gt; Koristite jasne i opisne ključeve kako biste olakšali pronalaženje podataka.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ručna provera:&lt;/strong&gt; Povremeno proveravajte i brišite neaktuelne ili nepotrebne podatke da biste oslobodili prostor.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Bezbednost
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XSS (Cross-Site Scripting):&lt;/strong&gt; Budite oprezni s podacima koje čuvate. Enkriptujte osetljive podatke pre nego što ih sačuvate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS (Cross-Origin Resource Sharing):&lt;/strong&gt; Kada šaljete podatke između različitih domena, koristite CORS da biste osigurali da su samo ovlašćeni domeni u mogućnosti da pristupaju vašim resursima.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Performanse
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lazy loading:&lt;/strong&gt; Prilikom učitavanja podataka iz IndexedDB ili Local Storage, razmotrite korišćenje lazy loading pristupa kako biste smanjili vreme učitavanja.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch operacije:&lt;/strong&gt; Kada radite sa IndexedDB, koristite batch operacije za dodavanje ili ažuriranje više stavki odjednom, čime ćete smanjiti broj transakcija i povećati brzinu.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Reaktivno Čuvanje Podataka
&lt;/h2&gt;

&lt;p&gt;U kombinaciji sa React-om, možete koristiti reaktivne pristupe za čuvanje podataka. Na primer, kreiranje prilagođenog hook-a za rad sa local storage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useLocalStorage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;storedValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setStoredValue&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;storedValue&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;storedValue&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;storedValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setStoredValue&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useLocalStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
        &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
        &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Enter your name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Your&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="na"&gt;is&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Analiza i Monitoring
&lt;/h2&gt;

&lt;p&gt;Uvek je korisno analizirati i pratiti kako se podaci koriste u aplikaciji. Alati za analizu podataka kao što su Google Analytics ili Mixpanel mogu pomoći u razumevanju interakcija korisnika i optimizaciji sistema za čuvanje podataka.&lt;/p&gt;




&lt;h2&gt;
  
  
  Zaključak
&lt;/h2&gt;

&lt;p&gt;Razumevanje različitih metoda za čuvanje podataka u JavaScript-u, kao i njihovih prednosti i mana, može značajno poboljšati vašu aplikaciju. Uzimajući u obzir bezbednost, performanse i korisničko iskustvo, možete izabrati pravu metodu za vaše specifične potrebe. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>data</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Mastering HTML i CSS za Intervju: 50 Obaveznih Pitanja i 10 Koja će Vas Iznenaditi</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Thu, 19 Sep 2024 09:07:36 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/mastering-html-i-css-za-intervju-50-obaveznih-pitanja-i-10-koja-ce-vas-iznenaditi-36kc</link>
      <guid>https://dev.to/jelena_petkovic/mastering-html-i-css-za-intervju-50-obaveznih-pitanja-i-10-koja-ce-vas-iznenaditi-36kc</guid>
      <description>&lt;p&gt;Kada se pripremate za intervju za poziciju front-end developera, HTML i CSS su osnovne tehnologije koje će vam sigurno biti na intervjuu. Većina poslodavaca će vam postaviti uobičajena pitanja koja se tiču strukture HTML-a i stilizacije CSS-om, ali postoje i ona pitanja koja vas mogu iznenaditi i izazvati konfuziju. Zato je važno ne samo savladati osnovna znanja, već biti spreman na dublja i neočekivana pitanja.&lt;br&gt;
U ovom postu, prvo ćemo proći kroz 50 najčešćih pitanja koja se postavljaju na intervjuima za HTML i CSS, zajedno sa detaljnim odgovorima. Na kraju, dodaću još 10 neočekivanih pitanja koja vas mogu zbuniti, ali sa objašnjenjima kako ih rešiti.&lt;/p&gt;


&lt;h3&gt;
  
  
  HTML pitanja:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Šta je HTML i koja je njegova osnovna svrha?&lt;/strong&gt;&lt;br&gt;
    HTML (HyperText Markup Language) je jezik za označavanje koji se koristi za strukturiranje sadržaja na web stranici. Omogućuje kreiranje naslova, paragrafa, linkova, slika, tabela i drugih elemenata stranice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Koje su glavne HTML5 novine u odnosu na prethodne verzije?&lt;/strong&gt;&lt;br&gt;
    HTML5 donosi semantičke oznake poput &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;, podršku za multimedijske elemente &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; i &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;, lokalno skladištenje (localStorage, sessionStorage), te unapređenu podršku za grafiku putem &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; elementa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Objasni razliku između &lt;code&gt;id&lt;/code&gt; i &lt;code&gt;class&lt;/code&gt; atributa.&lt;/strong&gt;&lt;br&gt;
    &lt;code&gt;id&lt;/code&gt; je jedinstveni identifikator koji se može dodeliti samo jednom elementu na stranici, dok se &lt;code&gt;class&lt;/code&gt; može dodeliti više elemenata i koristi se za grupisanje elemenata sa sličnim stilom ili funkcionalnošću.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Šta je semantički HTML i zašto je važan?&lt;/strong&gt;&lt;br&gt;
    Semantički HTML koristi elemente koji imaju jasno definisano značenje (npr. &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;). To poboljšava pristupačnost, SEO, čitljivost koda i olakšava rad pretraživačima i čitačima ekrana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Koje su glavne semantičke HTML5 oznake i kako se koriste?&lt;/strong&gt;&lt;br&gt;
    Glavne oznake uključuju &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;, i &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;. Ove oznake pružaju strukturu i jasnoću za organizaciju sadržaja.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Šta je &lt;code&gt;DOCTYPE&lt;/code&gt; i zašto je važan u HTML dokumentu?&lt;/strong&gt;&lt;br&gt;
    &lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt; deklaracija definiše verziju HTML-a koja se koristi. U HTML5, jednostavna deklaracija &lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt; obezbeđuje da se stranica prikazuje pravilno u svim pretraživačima.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Kako napraviti link u HTML-u?&lt;/strong&gt;&lt;br&gt;
    Koristi se &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; oznaka: &lt;code&gt;&amp;lt;a href="https://example.com"&amp;gt;Klikni ovde&amp;lt;/a&amp;gt;&lt;/code&gt;. &lt;code&gt;href&lt;/code&gt; atribut specificira URL na koji link vodi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Kako kreirati tabelu u HTML-u?&lt;/strong&gt;&lt;br&gt;
    Tabela se kreira pomoću &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; oznake, a redovi i kolone pomoću &lt;code&gt;&amp;lt;tr&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;td&amp;gt;&lt;/code&gt;, i &lt;code&gt;&amp;lt;th&amp;gt;&lt;/code&gt;. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Ime&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Prezime&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;Marko&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;Marković&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;9. Šta je atribut &lt;code&gt;alt&lt;/code&gt; kod slike i zašto je važan?&lt;/strong&gt;&lt;br&gt;
    &lt;code&gt;alt&lt;/code&gt; atribut pruža alternativni tekst za slike koje se ne mogu prikazati. Važan je za SEO i pristupačnost, jer ga čitači ekrana koriste za opisivanje slike.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Kako kreirati formu u HTML-u?&lt;/strong&gt;&lt;br&gt;
     Forme se kreiraju pomoću &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; oznake sa poljima poput &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;, i &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/submit"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"ime"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Unesi ime"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Pošalji&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;11. Kako se koristi &lt;code&gt;input&lt;/code&gt; tipa &lt;code&gt;radio&lt;/code&gt; i &lt;code&gt;checkbox&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;radio&lt;/code&gt; se koristi kada je potrebno izabrati jednu opciju iz grupe, dok &lt;code&gt;checkbox&lt;/code&gt; omogućava izbor više opcija. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"radio"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"pol"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"muško"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; Muško
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"radio"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"pol"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"žensko"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; Žensko
  &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hobi"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"sport"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; Sport
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;12. Kako uključiti video u HTML?&lt;/strong&gt;&lt;br&gt;
     Koristi se &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; oznaka:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;controls&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"video.mp4"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"video/mp4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;13. Šta je atribut &lt;code&gt;placeholder&lt;/code&gt; u HTML formi?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;placeholder&lt;/code&gt; atribut pruža tekstualni nagoveštaj unutar polja za unos koji se vidi dok korisnik ne unese podatke. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Unesi svoje ime"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;14. Kako definišemo listu sa redosledom i bez redosleda?&lt;/strong&gt;&lt;br&gt;
     Koristi se &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt; za numerisane liste i &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; za liste sa tačkama. Stavke se definišu pomoću &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Prva stavka&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Druga stavka&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;15. Kako pravimo spoljne i unutrašnje linkove u HTML-u?&lt;/strong&gt;&lt;br&gt;
     Spoljni link vodi do druge stranice na internetu (koristi se puna URL adresa), dok unutrašnji link vodi na drugu stranicu unutar sajta (koristi se relativna adresa). Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Spoljni link&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/kontakt"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Unutrašnji link&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS pitanja:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;16. Šta je CSS i čemu služi?&lt;/strong&gt;&lt;br&gt;
     CSS (Cascading Style Sheets) služi za stilizovanje HTML elemenata, definišući boje, margine, pozicioniranje, fontove, itd.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;17. Koje su prednosti korišćenja eksternih CSS fajlova?&lt;/strong&gt;&lt;br&gt;
     Eksterni CSS fajlovi omogućavaju da se stilovi dele između više HTML stranica, smanjujući redundanciju i olakšavajući održavanje koda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;18. Kako primenjujemo CSS na HTML elemente?&lt;/strong&gt;&lt;br&gt;
     CSS se može primeniti na tri načina: inline (unutar HTML-a pomoću &lt;code&gt;style&lt;/code&gt; atributa), u &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; oznaci unutar &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, ili u eksternom CSS fajlu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;19. Objasni &lt;code&gt;box model&lt;/code&gt; u CSS-u.&lt;/strong&gt;&lt;br&gt;
     CSS box model definiše kako se svaki HTML element prikazuje, uključujući sadržaj (content), padding, border, i margin. To je ključna osnova za razumevanje layout-a.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fga0ndgnwdr90b0ie2f4m.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fga0ndgnwdr90b0ie2f4m.gif" alt="Image description" width="402" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;20. Kako dodati pozadinsku sliku u CSS-u?&lt;/strong&gt;&lt;br&gt;
     Koristi se &lt;code&gt;background-image&lt;/code&gt; svojstvo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('slika.jpg')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;21. Kako centrirati element horizontalno pomoću CSS-a?&lt;/strong&gt;&lt;br&gt;
     Za blok elemente koristi se &lt;code&gt;margin: 0 auto&lt;/code&gt; ako element ima zadatu širinu. Za inline elemente koristi se &lt;code&gt;text-align: center&lt;/code&gt; na roditelju.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;22. Kako se kreiraju responsive web stranice pomoću CSS-a?&lt;/strong&gt;&lt;br&gt;
     Responsive dizajn se kreira korišćenjem media query-ja, fleksibilnih jedinica poput &lt;code&gt;em&lt;/code&gt;, &lt;code&gt;rem&lt;/code&gt;, i &lt;code&gt;vw/vh&lt;/code&gt;, i fleksibilnih layout sistema kao što su Flexbox i Grid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;23. Šta su CSS pseudo-klase i kako se koriste?&lt;/strong&gt;&lt;br&gt;
     Pseudo-klase definišu posebna stanja elemenata, npr. &lt;code&gt;:hover&lt;/code&gt;, &lt;code&gt;:focus&lt;/code&gt;, &lt;code&gt;:nth-child()&lt;/code&gt;. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;24. Kako koristiti Flexbox za postavljanje elemenata?&lt;/strong&gt;&lt;br&gt;
     Flexbox je moćan alat za postavljanje elemenata u jednom pravcu (horizontalno ili vertikalno) i koristi se pomoću &lt;code&gt;display: flex&lt;/code&gt;. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;25. Kako funkcionišu CSS grid layout sistemi?&lt;/strong&gt;&lt;br&gt;
     CSS Grid omogućava kreiranje dvodimenzionalnih layout-ova koristeći redove i kolone. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nc"&gt;.grid&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;26. Koja je razlika između &lt;code&gt;inline&lt;/code&gt; i &lt;code&gt;block&lt;/code&gt; elemenata u CSS-u?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;block&lt;/code&gt; elementi zauzimaju celu širinu roditeljskog elementa i počinju novi red (npr. &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;), dok &lt;code&gt;inline&lt;/code&gt; elementi zauzimaju samo potrebnu širinu i stoje u istom redu (npr. &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;27. Kako funkcioniše &lt;code&gt;z-index&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;z-index&lt;/code&gt; definiše redosled preklapanja elemenata. Elementi sa većim &lt;code&gt;z-index&lt;/code&gt; vrednostima će biti iznad onih sa manjim vrednostima. Radi samo na elementima sa &lt;code&gt;position&lt;/code&gt; vrednostima osim &lt;code&gt;static&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;28. Šta je razlika između &lt;code&gt;position: relative&lt;/code&gt;, &lt;code&gt;absolute&lt;/code&gt;, &lt;code&gt;fixed&lt;/code&gt;, i &lt;code&gt;sticky&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
    - &lt;code&gt;relative&lt;/code&gt;: Pozicionira element relativno prema njegovom uobičajenom mestu.&lt;br&gt;&lt;br&gt;
    - &lt;code&gt;absolute&lt;/code&gt;: Pozicionira element relativno prema najbližem pozicioniranom roditelju.&lt;br&gt;&lt;br&gt;
    - &lt;code&gt;fixed&lt;/code&gt;: Element je fiksiran u odnosu na prozor pretraživača.&lt;br&gt;&lt;br&gt;
    - &lt;code&gt;sticky&lt;/code&gt;: Kombinacija &lt;code&gt;relative&lt;/code&gt; i &lt;code&gt;fixed&lt;/code&gt; - ostaje relativan dok ne dosegne određenu tačku.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;29. Kako se koristi &lt;code&gt;calc()&lt;/code&gt; funkcija u CSS-u?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;calc()&lt;/code&gt; omogućava kombinovanje različitih CSS jedinica u izračunavanju vrednosti. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="n"&gt;-&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;30. Kako se koristi &lt;code&gt;transition&lt;/code&gt; za animaciju u CSS-u?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;transition&lt;/code&gt; omogućava dodavanje efekta prelaza između dva stanja elementa. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;background-color&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;31. Kako primeniti više klasa na jedan HTML element?&lt;/strong&gt;&lt;br&gt;
     Više klasa se dodaje razdvajanjem njihovih imena razmakom. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box rounded"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;32. Kako se kreira vertikalni razmak između blok elemenata?&lt;/strong&gt;&lt;br&gt;
     Koristi se &lt;code&gt;margin&lt;/code&gt;. Na primer, &lt;code&gt;margin-top&lt;/code&gt; ili &lt;code&gt;margin-bottom&lt;/code&gt; mogu kreirati razmak između elemenata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;33. Šta su CSS varijable i kako se koriste?&lt;/strong&gt;&lt;br&gt;
     CSS varijable omogućavaju definisanje prilagodljivih vrednosti koje se mogu koristiti više puta u stilovima. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="py"&gt;--main-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#96c1b0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--main-color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;34. Kako izbeći CSS konflikte pomoću &lt;code&gt;specificity&lt;/code&gt; pravila?&lt;/strong&gt;&lt;br&gt;
     Specificity određuje koja pravila će biti primenjena kada više selektora odgovaraju istom elementu. Specifičniji selektori (npr. ID selektori) imaju prednost nad opštim selektorima (npr. tagovi ili klase).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Nivo - univerzalni selektor, ne utiče uopšte na specifičnost (*)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nivo &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML selektor &lt;/li&gt;
&lt;li&gt;pseudo-element (::before, ::after, ::first-letter, ::first-line, ::selection...)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nivo &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;selektor klase &lt;/li&gt;
&lt;li&gt;selektor HTML parametra (npr.: a[href$=".pdf"], input[name*="email"] ,  [class~="button"] ...)&lt;/li&gt;
&lt;li&gt;pseudo-klasa (:hover, :focus, :active, :first-child, :nth-child())&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nivo - ID selektor&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nivo - inline CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nivo - !important pravilo&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;35. Šta znači &lt;code&gt;!important&lt;/code&gt; i kada ga treba koristiti?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;!important&lt;/code&gt; preuzima prioritet nad bilo kojim drugim pravilima za isti element. Koristi se samo u posebnim slučajevima kada treba nadjačati pravilo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;36. Kako kreirati transition ili transform animacije u CSS-u?&lt;/strong&gt;&lt;br&gt;
     Koriste se svojstva poput &lt;code&gt;transition&lt;/code&gt; za prelaze između stanja ili &lt;code&gt;transform&lt;/code&gt; za transformacije (rotacija, skaliranje, itd.). Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="m"&gt;0.5s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;45deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;37. Kako dodati senku elementima?&lt;/strong&gt;&lt;br&gt;
     Koristi se &lt;code&gt;box-shadow&lt;/code&gt; za elemente kao što su div-ovi ili &lt;code&gt;text-shadow&lt;/code&gt; za tekst. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;box&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;38. Šta znači &lt;code&gt;display: none&lt;/code&gt; i kako se razlikuje od &lt;code&gt;visibility: hidden&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;display: none&lt;/code&gt; potpuno uklanja element iz dokumenta i layout-a, dok &lt;code&gt;visibility: hidden&lt;/code&gt; element čini nevidljivim, ali on i dalje zauzima prostor na stranici.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;39. Kako koristiti &lt;code&gt;media queries&lt;/code&gt; za prilagođavanje različitim uređajima?&lt;/strong&gt;&lt;br&gt;
     Media queries omogućavaju promenu stilova zavisno od veličine ekrana ili uređaja. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;40. Kako koristiti &lt;code&gt;float&lt;/code&gt; i koje su njegove alternative?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;float&lt;/code&gt; se koristi za postavljanje elemenata levo ili desno od roditeljskog elementa. Moderne alternative su Flexbox i Grid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;41. Kako kreirati transparentnost u CSS-u?&lt;/strong&gt;&lt;br&gt;
     Koristi se &lt;code&gt;opacity&lt;/code&gt; ili RGBA boje. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;42. Kako definišemo globalne stilove?&lt;/strong&gt;&lt;br&gt;
     Globalni stilovi se definišu na vrhu CSS fajla ili koristeći selektore poput &lt;code&gt;*&lt;/code&gt; ili &lt;code&gt;html&lt;/code&gt;, &lt;code&gt;body&lt;/code&gt;. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;43. Šta su CSS vendor prefiksi i zašto su važni?&lt;/strong&gt;&lt;br&gt;
     Vendor prefiksi (npr. &lt;code&gt;-webkit-&lt;/code&gt;, &lt;code&gt;-moz-&lt;/code&gt;, &lt;code&gt;-o-&lt;/code&gt;) omogućavaju podršku za novija CSS svojstva u različitim pretraživačima, dok svojstva još nisu potpuno standardizovana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;44. Kako koristiti &lt;code&gt;min-width&lt;/code&gt; i &lt;code&gt;max-width&lt;/code&gt; za responsivne dizajne?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;min-width&lt;/code&gt; i &lt;code&gt;max-width&lt;/code&gt; ograničavaju minimalne i maksimalne širine elemenata, čime se osigurava prilagodljiv dizajn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;45. Kako primeniti iste stilove na više elemenata u CSS-u?&lt;/strong&gt;&lt;br&gt;
     Više selektora se može grupisati koristeći zarez. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#96c1b0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;46. Kako stilizovati forme u CSS-u?&lt;/strong&gt;&lt;br&gt;
     Možeš koristiti CSS pravila kao za druge elemente, ali može biti potrebno dodatno prilagođavanje za različite pretraživače. &lt;br&gt;
Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"text"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#96c1b0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;47. Šta je &lt;code&gt;clearfix&lt;/code&gt; trik u CSS-u?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;clearfix&lt;/code&gt; se koristi za rešavanje problema sa float elementima. Najčešće koristi pseudo-element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nc"&gt;.clearfix&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;both&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;48. Kako koristiti &lt;code&gt;aspect-ratio&lt;/code&gt; u CSS-u?&lt;/strong&gt;&lt;br&gt;
     &lt;code&gt;aspect-ratio&lt;/code&gt; održava proporcije elementa (širina naspram visine) u zadatom odnosu. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="py"&gt;aspect-ratio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;49. Kako možemo kontrolisati protok teksta unutar elementa?&lt;/strong&gt;&lt;br&gt;
    Koriste se svojstva kao što su:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;white-space&lt;/code&gt;: kontroliše kako se upravlja razmacima i linijama unutar elementa (npr. &lt;code&gt;nowrap&lt;/code&gt; za onemogućavanje prelamanja teksta).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;overflow&lt;/code&gt;: određuje šta se dešava sa sadržajem koji izlazi izvan granica elementa (npr. &lt;code&gt;hidden&lt;/code&gt;, &lt;code&gt;scroll&lt;/code&gt;, &lt;code&gt;auto&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;text-overflow&lt;/code&gt;: koristi se zajedno sa &lt;code&gt;overflow&lt;/code&gt; i &lt;code&gt;white-space&lt;/code&gt; svojstvima za kontrolu kako se prikazuje višak teksta, npr. sa &lt;code&gt;ellipsis&lt;/code&gt; dodaje tri tačke kada tekst prelazi granicu elementa. Primer:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;     &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nl"&gt;white-space&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;nowrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;text-overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ellipsis&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Ova svojstva omogućavaju kontrolu prikaza i formatiranja teksta, posebno u slučajevima kada je prostor za tekst ograničen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;50. Kako stilizovati listu tako da nema tačke ili brojeve?&lt;/strong&gt;&lt;br&gt;
     Koristi se svojstvo &lt;code&gt;list-style-type: none;&lt;/code&gt;. Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;ul&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;list-style-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ovo su najčešća i najbitnija pitanja sa odgovorima za HTML i CSS intervjue. Ova pitanja pokrivaju širok spektar osnovnih i naprednih tema, koje su ključne za web development.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus pitanja
&lt;/h2&gt;

&lt;p&gt;Evo 10 pitanja za HTML i CSS koja mogu biti neočekivana ili te mogu zbuniti na intervjuu, zajedno sa objašnjenjima:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Kako funkcioniše &lt;code&gt;data-*&lt;/code&gt; atribut u HTML-u i za šta se koristi?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;data-*&lt;/code&gt; atributi se koriste za čuvanje prilagođenih podataka u HTML elementima koje JavaScript može da koristi. Na primer:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;     &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-user-id=&lt;/span&gt;&lt;span class="s"&gt;"123"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Možeš pristupiti ovim podacima pomoću JavaScript-a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;     &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Šta se dešava ako u CSS-u primeniš &lt;code&gt;width: 100%&lt;/code&gt; na element koji već ima &lt;code&gt;padding&lt;/code&gt; i &lt;code&gt;border&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
    Podrazumevano, &lt;code&gt;width: 100%&lt;/code&gt; će postaviti širinu elementa na 100% njegove roditeljske širine, ali će &lt;code&gt;padding&lt;/code&gt; i &lt;code&gt;border&lt;/code&gt; dodatno proširiti ukupnu širinu. Da bi to izbegao, koristi &lt;code&gt;box-sizing: border-box&lt;/code&gt;, što uključuje &lt;code&gt;padding&lt;/code&gt; i &lt;code&gt;border&lt;/code&gt; u izračunavanje širine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Koja je razlika između &lt;code&gt;link&lt;/code&gt; i &lt;code&gt;@import&lt;/code&gt; za dodavanje CSS-a u HTML?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;link&lt;/code&gt; element se koristi u &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; sekciji za uključivanje CSS-a, dok se &lt;code&gt;@import&lt;/code&gt; koristi unutar CSS fajlova za učitavanje drugih CSS fajlova. &lt;br&gt;
Razlike:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;link&lt;/code&gt; je brži jer se CSS učitava paralelno.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;@import&lt;/code&gt; odlaže učitavanje CSS-a, što može usporiti renderovanje stranice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;link&lt;/code&gt; je bolje podržan i ima veći prioritet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Kako možeš stilizovati placeholder tekst u HTML input elementima?&lt;/strong&gt;&lt;br&gt;
    Koristi pseudo-klasu &lt;code&gt;::placeholder&lt;/code&gt; da bi stilizovao tekst unutar input polja. Na primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;     &lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="nd"&gt;::placeholder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;font-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;italic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Šta se dešava kada postaviš &lt;code&gt;position: absolute&lt;/code&gt; na element bez pozicioniranog roditelja?&lt;/strong&gt;&lt;br&gt;
    Ako roditeljski element nema zadatu poziciju (&lt;code&gt;relative&lt;/code&gt;, &lt;code&gt;absolute&lt;/code&gt;, &lt;code&gt;fixed&lt;/code&gt; ili &lt;code&gt;sticky&lt;/code&gt;), apsolutno pozicionirani element će se pozicionirati relativno prema prozoru pretraživača, a ne prema roditelju.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Kako kreirati trougao koristeći samo CSS?&lt;/strong&gt;&lt;br&gt;
Trougao se kreira pomoću &lt;code&gt;border&lt;/code&gt; svojstava. Na primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;     &lt;span class="nc"&gt;.triangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;border-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;border-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;border-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ovaj kod kreira crveni trougao.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Kako funkcionišu CSS &lt;code&gt;rem&lt;/code&gt; i &lt;code&gt;em&lt;/code&gt; jedinice i koja je razlika između njih?&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;rem&lt;/code&gt; je relativna jedinica u odnosu na &lt;code&gt;font-size&lt;/code&gt; root elementa (obično &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;), dok je &lt;code&gt;em&lt;/code&gt; relativan u odnosu na &lt;code&gt;font-size&lt;/code&gt; roditeljskog elementa. &lt;/p&gt;

&lt;p&gt;Na primer, ako je &lt;code&gt;html { font-size: 16px; }&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;1rem&lt;/code&gt; je uvek 16px.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;1em&lt;/code&gt; zavisi od veličine fonta roditelja.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8. Kako radi zlatni rez (Golden Ratio) u web dizajnu i kako ga koristiš u CSS-u?&lt;/strong&gt;&lt;br&gt;
    Zlatni rez je odnos od otprilike 1.618:1 i često se koristi za raspored elemenata na stranici kako bi dizajn bio vizuelno prijatan. Može se koristiti za određivanje proporcija elemenata, npr. širine i visine sekcija:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;     &lt;span class="nc"&gt;.box&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;61.8%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;9. Šta se dešava kada HTML dokument nema deklaraciju &lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
    Bez &lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;, pretraživač može prikazivati stranicu u "quirks mode", što uzrokuje ponašanje neusklađeno sa standardima, potencijalno menjajući renderovanje elemenata, veličine margina, itd.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Kako možeš učiniti da tekst bude selektibilan ili neselektibilan pomoću CSS-a?&lt;/strong&gt;&lt;br&gt;
Koristi CSS svojstvo &lt;code&gt;user-select&lt;/code&gt;. Na primer, da onemogućiš selektovanje teksta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;      &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="py"&gt;user-select&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Možeš omogućiti selektovanje sa &lt;code&gt;user-select: text;&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Zaključak:
&lt;/h2&gt;

&lt;p&gt;Intervju za poziciju front-end developera može biti izazovan, ali uz pravu pripremu možete se lako izboriti sa svim pitanjima. Osim što je važno savladati osnovne koncepte HTML-a i CSS-a, od koristi vam može biti i priprema za pitanja koja idu korak dalje i zahtevaju dublje razumevanje tehnologija. Neočekivana pitanja koja vas zbunjuju pružaju priliku da se izdvojite od konkurencije i pokažete svoju sposobnost za rešavanje problema na kreativne načine.&lt;/p&gt;

</description>
      <category>html</category>
      <category>frontend</category>
      <category>css</category>
      <category>interview</category>
    </item>
    <item>
      <title>Da li je uvek potrebno definisati `props` i `state` u konstruktoru kod klasnih komponenti u TypeScript-u?</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Tue, 17 Sep 2024 11:07:24 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/da-li-je-uvek-potrebno-definisati-props-i-state-u-konstruktoru-kod-klasnih-komponenti-u-typescript-u-h6e</link>
      <guid>https://dev.to/jelena_petkovic/da-li-je-uvek-potrebno-definisati-props-i-state-u-konstruktoru-kod-klasnih-komponenti-u-typescript-u-h6e</guid>
      <description>&lt;p&gt;Kada radimo sa klasnim komponentama u React-u koristeći TypeScript, često se postavlja pitanje da li je potrebno i obavezno definisati &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt; unutar konstruktora. Odgovor na ovo pitanje zavisi od specifičnih potreba tvoje komponente. U ovom blog postu, razmotrićemo kada i zašto koristiti konstruktor za definisanje &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;, kao i prednosti i nedostatke različitih pristupa.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Korišćenje konstruktora&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Kada koristiti konstruktor:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1. Inicijalizacija stanja (&lt;code&gt;state&lt;/code&gt;) na osnovu &lt;code&gt;props&lt;/code&gt;:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Ako &lt;code&gt;state&lt;/code&gt; zavisi od &lt;code&gt;props&lt;/code&gt; ili ako treba da izvršiš dodatnu logiku prilikom inicijalizacije stanja, konstruktor je najbolji izbor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Postavljanje početnih vrednosti stanja:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Kada želiš da postaviš početno stanje komponente, konstruktor je tradicionalan način za to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primer:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;initialCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentState&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IMyComponentProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentState&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initialCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  &lt;strong&gt;Kada ne koristiti konstruktor&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1. Jednostavna inicijalizacija stanja:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Ako &lt;code&gt;state&lt;/code&gt; nije složen i ne zavisi od &lt;code&gt;props&lt;/code&gt;, možeš koristiti direktnu inicijalizaciju stanja bez konstruktora.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Nema potrebe za složenom logikom:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Ako ne treba da izvršiš dodatnu logiku u vezi sa &lt;code&gt;props&lt;/code&gt; ili &lt;code&gt;state&lt;/code&gt;, možeš postaviti &lt;code&gt;state&lt;/code&gt; direktno na nivou klase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primer:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentState&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IMyComponentProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentState&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IMyComponentState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Prednosti i nedostaci različitih pristupa&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Korišćenje konstruktora:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Prednosti:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Složenija inicijalizacija:&lt;/strong&gt; Omogućava postavljanje &lt;code&gt;state&lt;/code&gt; na osnovu &lt;code&gt;props&lt;/code&gt; i izvršenje dodatne logike pre nego što komponenta renderuje.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kontrola:&lt;/strong&gt; Omogućava preciznu kontrolu nad inicijalizacijom i možeš lako dodati ili izmeniti logiku inicijalizacije.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nedostaci:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Više koda:&lt;/strong&gt; Korišćenje konstruktora može dodati više koda, što može učiniti komponentu težom za čitanje, naručito ako je inicijalizacija jednostavna.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Više složenosti:&lt;/strong&gt; Uvođenje dodatne složenosti ako jednostavna inicijalizacija može biti obavljena bez konstruktora.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Direktna inicijalizacija (&lt;code&gt;state&lt;/code&gt;) van konstruktora:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Prednosti:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jednostavnost:&lt;/strong&gt; Manje koda i jasniji kod za jednostavne komponente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bolja čitljivost:&lt;/strong&gt; Komponente su često čitljivije kada se koristi direktna inicijalizacija za &lt;code&gt;state&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nedostaci:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ograničena fleksibilnost:&lt;/strong&gt; Ne možeš lako inicijalizovati &lt;code&gt;state&lt;/code&gt; na osnovu &lt;code&gt;props&lt;/code&gt; ili dodati složenu logiku prilikom inicijalizacije.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Zaključak&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Koristi konstruktor&lt;/strong&gt; ako treba da inicijalizuješ &lt;code&gt;state&lt;/code&gt; na osnovu &lt;code&gt;props&lt;/code&gt; ili ako imaš složenu logiku koja treba da se izvrši pre renderovanja komponente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Izbegni konstruktor&lt;/strong&gt; ako tvoja inicijalizacija &lt;code&gt;state&lt;/code&gt; može biti jednostavno postavljena direktno na nivou klase i ne zahteva dodatnu logiku.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oba pristupa su ispravna i zavise od složenosti tvoje komponente i specifičnih potreba. U savremenom React kodiranju, mnogi developeri preferiraju jednostavniji pristup direktne inicijalizacije ako to zadovoljava njihove potrebe.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Funkcionalne i Klasne Komponente u React-u sa TypeScript-om</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Tue, 17 Sep 2024 10:36:47 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/funkcionalne-i-klasne-komponente-u-react-u-sa-typescript-om-1612</link>
      <guid>https://dev.to/jelena_petkovic/funkcionalne-i-klasne-komponente-u-react-u-sa-typescript-om-1612</guid>
      <description>&lt;p&gt;U React-u sa TypeScript-om možemo koristiti dva glavna pristupa za kreiranje komponenti: funkcionalne i klasne komponente. Oba pristupa omogućuju rad sa &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;, ali koriste nešto drugačije paradigme. TypeScript dodatno pojačava razvojnu sigurnost pružanjem statičkog tipiziranja, što nam omogućuje da precizno definišemo oblik &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;U nastavku ćemo pogledati primere različitih komponenti, koristeći &lt;code&gt;interface&lt;/code&gt; za definisanje tipova, kako bismo osigurali doslednost i čitljivost koda.&lt;/p&gt;




&lt;h2&gt;
  
  
  F-1.  Funkcionalna komponenta bez &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;U ovom slučaju, jednostavna funkcionalna komponenta koja ne koristi ni &lt;code&gt;props&lt;/code&gt; ni &lt;code&gt;state&lt;/code&gt; izgleda ovako:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionalComponent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello, DEV.to!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ova komponenta samo prikazuje statički tekst.&lt;/p&gt;




&lt;h2&gt;
  
  
  F-2.  Funkcionalna komponenta sa &lt;code&gt;props&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Kada želimo da prosledimo podatke kroz &lt;code&gt;props&lt;/code&gt;, koristimo &lt;code&gt;interface&lt;/code&gt; kako bismo definisali oblik tih podataka:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionalComponentWithProps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IMyProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello, &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ovde &lt;code&gt;IMyProps&lt;/code&gt; sadrži &lt;code&gt;name&lt;/code&gt; koji se koristi za prikaz personalizovanog pozdrava.&lt;/p&gt;




&lt;h2&gt;
  
  
  F-3.  Funkcionalna komponenta sa &lt;code&gt;state&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Kada koristimo &lt;code&gt;state&lt;/code&gt; u funkcionalnim komponentama, koristimo React-ov &lt;code&gt;useState&lt;/code&gt; hook:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionalComponentWithState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increase&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ova komponenta koristi lokalni &lt;code&gt;state&lt;/code&gt; za praćenje brojača.&lt;/p&gt;




&lt;h2&gt;
  
  
  F-4.  Funkcionalna komponenta sa &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Kombinovanjem &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt; možemo imati fleksibilne komponente koje primaju podatke kroz &lt;code&gt;props&lt;/code&gt;, a manipulišu stanjem interno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;initialCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionalComponentWithPropsAndState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IMyProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;initialCount&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initialCount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increase&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ova komponenta koristi &lt;code&gt;initialCount&lt;/code&gt; kao &lt;code&gt;prop&lt;/code&gt;, a interni &lt;code&gt;state&lt;/code&gt; za dinamičko praćenje brojača.&lt;/p&gt;







&lt;h2&gt;
  
  
  K-1.  Klasna komponenta bez &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Klasna komponenta bez &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt; u React-u izgleda ovako:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClassComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello, DEV.to!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ovo je jednostavna klasna komponenta koja prikazuje statički tekst.&lt;/p&gt;




&lt;h2&gt;
  
  
  K-2.  Klasna komponenta sa &lt;code&gt;props&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Kada klasna komponenta prima &lt;code&gt;props&lt;/code&gt;, definišemo ih pomoću &lt;code&gt;interface&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClassComponentWithProps&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IMyProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello, &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kao i kod funkcionalne komponente, ovde koristimo &lt;code&gt;props&lt;/code&gt; za prikaz personalizovanih podataka.&lt;/p&gt;




&lt;h2&gt;
  
  
  K-3.  Klasna komponenta sa &lt;code&gt;state&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Kod klasnih komponenti sa &lt;code&gt;state&lt;/code&gt;, definišemo stanje unutar konstruktora:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prazne zagrade u konstruktoru&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ako ne koristite props, možete jednostavno ostaviti prazne zagrade u konstruktoru:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyState&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClassComponentWithState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="nx"&gt;IMyState&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;({});&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increase&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Eksplicitno navesti {} kao tip za props&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ako želite biti eksplicitni u vezi sa props, možete navesti {} kao tip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyState&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClassComponentWithState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="nx"&gt;IMyState&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increase&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;-&amp;gt; U oba slučaja, TypeScript i React će ispravno funkcionisati. Ako vaša komponenta ne koristi props, jednostavno možete koristiti prazne zagrade u konstruktoru, ali obavezno prosledite {} u super pozivu kako biste izbegli greške u inicijalizaciji.&lt;/p&gt;

&lt;p&gt;Ova komponenta koristi &lt;code&gt;state&lt;/code&gt; kako bi pratila promene brojača.&lt;/p&gt;




&lt;h2&gt;
  
  
  K-4.  Klasna komponenta sa &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Za klasne komponente koje koriste i &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;, možemo kombinovati oba koncepta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;initialCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IMyState&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClassComponentWithPropsAndState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IMyProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;IMyState&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IMyProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initialCount&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increase&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ova komponenta prima početni brojač kroz &lt;code&gt;props&lt;/code&gt;, a dalje manipuliše stanjem interno.&lt;/p&gt;




&lt;p&gt;Korišćenje &lt;code&gt;interface&lt;/code&gt; u TypeScript-u donosi bolje tipiziranje i lakšu čitljivost koda, pogotovo kada radimo sa složenijim strukturama podataka. Sa ovim osnovnim primerima, imate osnovu za pisanje funkcionalnih i klasnih komponenti sa React-om i TypeScript-om.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>functional</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Kada koristiti type, a kada interface u TypeScript-u?</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Mon, 16 Sep 2024 20:33:53 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/kada-koristiti-type-a-kada-interface-u-typescript-u-35np</link>
      <guid>https://dev.to/jelena_petkovic/kada-koristiti-type-a-kada-interface-u-typescript-u-35np</guid>
      <description>&lt;p&gt;U TypeScript-u, i &lt;code&gt;type&lt;/code&gt; i &lt;code&gt;interface&lt;/code&gt; omogućavaju definisanje struktura podataka, ali postoje suptilne razlike između njih. U zavisnosti od zahteva aplikacije, jedan od njih može biti bolji izbor. U ovom blogu, istražićemo ključne razlike i dati smernice o tome kada koristiti type, a kada interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Proširivanje (&lt;code&gt;Extending&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/strong&gt; podržava nativno proširivanje. Možeš koristiti ključnu reč &lt;code&gt;extends&lt;/code&gt; kako bi kreirao nove interfejse na osnovu postojećih.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IAnimal&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;

   &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IDog&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;IAnimal&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nl"&gt;breed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;type&lt;/code&gt;&lt;/strong&gt; takođe podržava proširivanje, ali koristi drugačiji sintaksu (kombinovanje &lt;code&gt;&amp;amp;&lt;/code&gt; operatorom).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;

   &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;breed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Kada koristiti?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Ako planiraš da kreiraš složenije strukture koje ćeš često proširivati, &lt;code&gt;interface&lt;/code&gt; je prirodniji izbor. Za jednostavno kombinovanje nekoliko tipova, &lt;code&gt;type&lt;/code&gt; može biti efikasniji.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2. Deklaracija sa istim imenom&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/strong&gt; dozvoljava višestruke deklaracije sa istim imenom, a TypeScript će ih automatski spajati.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IUser&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;

   &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IUser&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;

   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jelena&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ove dve deklaracije se kombinuju u jedan interfejs sa oba polja (&lt;code&gt;name&lt;/code&gt; i &lt;code&gt;age&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;type&lt;/code&gt;&lt;/strong&gt; ne dozvoljava višestruke deklaracije istog imena. Svaki pokušaj deklarisanja istog tipa više puta prikazuje grešku.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;

   &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Greška - Duplicate identifier 'User'&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Kada koristiti?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Ako želiš da možeš kasnije proširiti definiciju nekog tipa u različitim fajlovima, &lt;code&gt;interface&lt;/code&gt; ti daje tu fleksibilnost.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3. Unije i tipovi koji nisu objekti&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;type&lt;/code&gt;&lt;/strong&gt; podržava definisanje kompleksnijih tipova, poput unija (unions), primitivnih tipova (npr. &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;), tuple-ova itd.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;loading&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/strong&gt; se uglavnom koristi za definisanje objekata i nije pogodan za definisanje unija ili primitivnih tipova.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kada koristiti?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   Ako treba da definišeš unije, tuple-ove ili kombinacije primitivnih tipova, koristi &lt;code&gt;type&lt;/code&gt;. Za rad sa objektima ili složenim strukturama podataka, koristi &lt;code&gt;interface&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;4. Reakcija zajednice&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/strong&gt; je dugo bio preporučivani pristup u TypeScript zajednici, posebno za tipiziranje objekata i klasa, jer je semantički jasnije da se radi o objektu. Takođe, React zajednica često preferira &lt;code&gt;interface&lt;/code&gt; za definisanje &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;type&lt;/code&gt;&lt;/strong&gt; je fleksibilniji i često se koristi kada je potrebno tipizirati unije, funkcije, ili kada treba kombinovati više tipova sa operatorom &lt;code&gt;&amp;amp;&lt;/code&gt; (intersekcije).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kada koristiti?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
   &lt;code&gt;interface&lt;/code&gt; je bolji izbor za konzistentnost i eksplicitnost pri radu sa objektima i složenim strukturama. &lt;code&gt;type&lt;/code&gt; je odličan kada ti treba fleksibilnost za definiranje tipova koji nisu objekti.&lt;/p&gt;




&lt;h3&gt;
  
  
  Ukratko: &lt;strong&gt;&lt;code&gt;interface&lt;/code&gt; vs. &lt;code&gt;type&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Osobina&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;&lt;code&gt;type&lt;/code&gt;&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Proširivanje (&lt;code&gt;extends&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Da&lt;/td&gt;
&lt;td&gt;Da (&lt;code&gt;&amp;amp;&lt;/code&gt; operator)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merging (spajanje definicija)&lt;/td&gt;
&lt;td&gt;Da&lt;/td&gt;
&lt;td&gt;Ne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Definisanje unija i primitivnih tipova&lt;/td&gt;
&lt;td&gt;Ne&lt;/td&gt;
&lt;td&gt;Da&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Koristi se za&lt;/td&gt;
&lt;td&gt;Objekte i klase&lt;/td&gt;
&lt;td&gt;Unije, primitive, funkcije&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fleksibilnost&lt;/td&gt;
&lt;td&gt;Više za strukture objekata&lt;/td&gt;
&lt;td&gt;Više za fleksibilne tipove&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reakcija zajednice&lt;/td&gt;
&lt;td&gt;Preporučen za React &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Fleksibilniji za kompleksne tipove&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Kada koristiti &lt;code&gt;type&lt;/code&gt;?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kada treba da definišeš unije tipova (npr. &lt;code&gt;"success" | "error" | "loading"&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Kada treba da kreiraš tuple ili kombinaciju primitivnih tipova.&lt;/li&gt;
&lt;li&gt;Kada koristiš funkcije i želiš da tipizuješ kompleksne povratne vrednosti.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Kada koristiti &lt;code&gt;interface&lt;/code&gt;?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kada definišeš objekte, posebno kada očekuješ da ćeš ih proširivati.&lt;/li&gt;
&lt;li&gt;Kada radiš sa React &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt; (zbog čitanosti i konvencije).&lt;/li&gt;
&lt;li&gt;Kada ti je potrebno spajanje (merging) definicija sa istim imenom u različitim fajlovima.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Zaključak
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;type&lt;/code&gt; i &lt;code&gt;interface&lt;/code&gt; imaju svoja mesta u TypeScript-u, i oba alata nude fleksibilnost u različitim situacijama. Ako radiš sa strukturama objekata i očekuješ njihovo proširivanje, interface je prirodniji izbor. Za fleksibilnije tipove, unije, i tuple-ove, type je bolji alat. Razumevanje ovih razlika pomaže ti da praviš čiste i održive TypeScript aplikacije.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Kako se Pripremiti za Intervju za React Developera?</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Sun, 15 Sep 2024 12:43:45 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/kako-se-pripremiti-za-intervju-za-react-developera-1e5a</link>
      <guid>https://dev.to/jelena_petkovic/kako-se-pripremiti-za-intervju-za-react-developera-1e5a</guid>
      <description>&lt;p&gt;Ako se pripremaš za intervju za poziciju React developera, potrebno je da pokažeš širok spektar znanja – od osnovnih koncepata JavaScript-a do naprednih tema vezanih za performanse i testiranje. U ovom postu proći ćemo kroz ključne oblasti na koje bi trebalo da se fokusiraš kako bi bio/la spreman/a za intervju.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Osnove JavaScript-a
&lt;/h3&gt;

&lt;p&gt;Iako će fokus intervjua biti na React-u, često će razgovor početi pitanjima o &lt;strong&gt;JavaScript-u&lt;/strong&gt;, jer React ne može da funkcioniše bez solidnog poznavanja jezika. Pokazivanje da razumeš moderne JavaScript funkcionalnosti je ključno.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ES6+ sintaksa&lt;/strong&gt;: Poznavanje modernih funkcionalnosti poput &lt;strong&gt;arrow funkcija&lt;/strong&gt;, &lt;strong&gt;destrukturiranja&lt;/strong&gt; objekata i nizova, &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, i &lt;strong&gt;template stringova&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asinhrono programiranje&lt;/strong&gt;: Znanje o &lt;strong&gt;Promises&lt;/strong&gt;, &lt;code&gt;async/await&lt;/code&gt;, i asinhronom rukovanju operacijama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closures, scope, hoisting&lt;/strong&gt;: Ključni koncepti za razumevanje kako funkcionišu promenljive i funkcije u JavaScript-u.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Array metode&lt;/strong&gt;: Korišćenje metoda poput &lt;code&gt;map()&lt;/code&gt;, &lt;code&gt;filter()&lt;/code&gt;, &lt;code&gt;reduce()&lt;/code&gt;, jer su veoma korisni u React-u.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Koja je razlika između &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, i &lt;code&gt;var&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Kako funkcioniše &lt;code&gt;async/await&lt;/code&gt; i kada bi koristio/la &lt;code&gt;Promise.all()&lt;/code&gt;?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Osnove React-a
&lt;/h3&gt;

&lt;p&gt;Da bi uspešno prošao/la tehnički intervju, moraš savladati osnove izgradnje aplikacija u React-u. Očekuj pitanja koja pokrivaju osnovne React koncepte, kao što su komponente, stanje i događaji.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Komponente&lt;/strong&gt;: Razlika između &lt;strong&gt;funkcionalnih&lt;/strong&gt; i &lt;strong&gt;klasnih komponenti&lt;/strong&gt;. Iako su funkcionalne komponente sa hooks-ovima sada standard, važno je razumeti oba pristupa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSX&lt;/strong&gt;: Sintaksa koju React koristi i kako ona funkcioniše ispod haube.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Props i state&lt;/strong&gt;: Razumevanje kako React koristi &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt; za upravljanje podacima.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event handling&lt;/strong&gt;: Rukovanje događajima u React-u i razumevanje sintetičkih događaja.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Koja je razlika između &lt;code&gt;props&lt;/code&gt; i &lt;code&gt;state&lt;/code&gt; u React-u?&lt;/li&gt;
&lt;li&gt;Kako funkcioniše &lt;code&gt;useState&lt;/code&gt; hook i kako bi koristio/la &lt;code&gt;useEffect&lt;/code&gt; za pozivanje API-ja prilikom mountovanja komponente?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Napredne React Teme
&lt;/h3&gt;

&lt;p&gt;Za srednje i seniorske pozicije, očekuje se da poznaješ napredne koncepte kao što su upravljanje složenim stanjem i optimizacija performansi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React Router&lt;/strong&gt;: Dinamičko rutiranje i optimizacija sa &lt;strong&gt;lazy loading&lt;/strong&gt;-om.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State management&lt;/strong&gt;: Znanje o alatima poput &lt;strong&gt;Redux-a&lt;/strong&gt; ili &lt;strong&gt;Context API-ja&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt;: Osim osnovnih hook-ova (&lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;useEffect&lt;/code&gt;), očekuje se da poznaješ i &lt;strong&gt;custom hooks&lt;/strong&gt;, &lt;code&gt;useReducer&lt;/code&gt;, &lt;code&gt;useContext&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memoizacija&lt;/strong&gt;: Korišćenje &lt;code&gt;React.memo&lt;/code&gt;, &lt;code&gt;useMemo&lt;/code&gt; i &lt;code&gt;useCallback&lt;/code&gt; za optimizaciju.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error boundaries&lt;/strong&gt;: Kako implementirati "granice grešaka" da bi se aplikacija nosila sa izuzecima.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kada bi koristio/la &lt;code&gt;useMemo&lt;/code&gt; i &lt;code&gt;useCallback&lt;/code&gt;? Kako oni poboljšavaju performanse?&lt;/li&gt;
&lt;li&gt;Kako bi koristio/la &lt;code&gt;useContext&lt;/code&gt; za deljenje podataka između komponenti bez prosleđivanja &lt;code&gt;props&lt;/code&gt;-a?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Performanse u React-u
&lt;/h3&gt;

&lt;p&gt;Optimizacija performansi je ključna za aplikacije koje rade brzo i efikasno. Očekuj pitanja o tome kako smanjiti nepotrebne render-e i ubrzati aplikaciju.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lazy loading komponente&lt;/strong&gt;: Učitavanje komponenata samo kada su potrebne.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code splitting&lt;/strong&gt;: Razbijanje aplikacije u manje delove radi bržeg učitavanja.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debouncing i throttling&lt;/strong&gt;: Optimizacija događaja poput onih prilikom kucanja u input polje.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtual DOM&lt;/strong&gt;: Razumevanje kako React koristi virtuelni DOM za efikasno renderovanje.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kako optimizuješ učitavanje velikih komponenti?&lt;/li&gt;
&lt;li&gt;Objani kako funkcioniše virtuelni DOM i zašto je važan za performanse.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. Stilizacija u React-u
&lt;/h3&gt;

&lt;p&gt;Stilizacija je važan deo izgradnje UI-a, pa je neophodno da znaš kako se stilizuju React komponente, bilo da koristiš klasičan CSS ili modernije metode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS-in-JS biblioteke&lt;/strong&gt;: Alati poput &lt;strong&gt;styled-components&lt;/strong&gt; ili &lt;strong&gt;emotion&lt;/strong&gt; za stilizovanje komponenti.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS Modules&lt;/strong&gt;: Lokalizacija stilova kako bi se izbegli konflikti u imenovanju klasa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive design&lt;/strong&gt;: Korišćenje &lt;strong&gt;media queries&lt;/strong&gt; za prilagođavanje različitim uređajima.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Frameworks&lt;/strong&gt;: Poznavanje alata poput &lt;strong&gt;Bootstrap-a&lt;/strong&gt; za brži razvoj responzivnih interfejsa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kako bi stilizovao/la komponentu koristeći &lt;code&gt;styled-components&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Kako implementirati prilagodljiv (responsive) dizajn u React aplikaciji?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  6. Testiranje React aplikacija
&lt;/h3&gt;

&lt;p&gt;Testiranje je ključno za održavanje stabilnosti i pouzdanosti aplikacija. Znanje o testiranju komponenti i interakcija korisnika je neophodno.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jest i React Testing Library&lt;/strong&gt;: Testiranje funkcionalnosti komponenti i korisničkih interakcija.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snapshot testiranje&lt;/strong&gt;: Testiranje UI promena.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unit i integration testovi&lt;/strong&gt;: Pisanje testova za manje delove i veće integracije u aplikaciji.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kako bi napisao/la test za komponentu koja koristi &lt;code&gt;useEffect&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Kada bi koristio/la snapshot testiranje?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  7. API i Asinhrono Programiranje
&lt;/h3&gt;

&lt;p&gt;React aplikacije često komuniciraju sa serverom, pa ćeš morati da znaš kako obaviti asinhrone operacije i upravljati stanjima učitavanja i grešaka.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fetch API ili Axios&lt;/strong&gt;: Alati za pozivanje REST API-ja.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphQL&lt;/strong&gt;: Plus ako znaš kako funkcioniše GraphQL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error handling&lt;/strong&gt;: Rukovanje greškama i loading stanjima dok se podaci učitavaju.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kako koristiš &lt;code&gt;useEffect&lt;/code&gt; za pozivanje API-ja i kako rukuješ greškama?&lt;/li&gt;
&lt;li&gt;Koje su prednosti korišćenja Axios-a u odnosu na Fetch API?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  8. Build Alati i Projekti
&lt;/h3&gt;

&lt;p&gt;Razumevanje alata koji pomažu pri izgradnji i buildovanju aplikacija pokazuje tvoju tehničku stručnost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ključne teme:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webpack i Babel&lt;/strong&gt;: Konfiguracija build procesa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm i yarn&lt;/strong&gt;: Upravljanje paketima i skriptama za build i testiranje.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD&lt;/strong&gt;: Znanje o kontinualnoj integraciji i deployment-u može biti korisno za naprednije pozicije.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kako bi konfigurisao/la Webpack za React aplikaciju?&lt;/li&gt;
&lt;li&gt;Kako koristiš npm ili yarn skripte za upravljanje projektom?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  9. Git i Timski Rad
&lt;/h3&gt;

&lt;p&gt;Poznavanje &lt;strong&gt;Git-a&lt;/strong&gt; je neophodno za timski rad i upravljanje verzijama. Očekuj pitanja o branch-ovanju, pravljenju pull request-ova, i rešavanju konflikata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primer pitanja:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kako bi rešio/la konflikt u Git-u?&lt;/li&gt;
&lt;li&gt;Objasni proces pravljenja pull request-a.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Zaključak
&lt;/h3&gt;

&lt;p&gt;Priprema za intervju za React developera zahteva razumevanje osnovnih i naprednih tehnologija. Fokusiraj se na osnovne JavaScript koncepte, React-ove hooks-ove, optimizaciju performansi i testiranje, ali ne zaboravi i na build alatke, stilizaciju, i Git kako bi pokazao/la sveobuhvatno znanje i spremnost za rad u timu.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>interview</category>
      <category>career</category>
    </item>
    <item>
      <title>Razumevanje Renderovanja i Rerenderovanja u React Aplikacijama: Kako funkcionišu i kako ih optimizovati</title>
      <dc:creator>Jelena Petkovic</dc:creator>
      <pubDate>Sat, 14 Sep 2024 10:31:46 +0000</pubDate>
      <link>https://dev.to/jelena_petkovic/razumevanje-renderovanja-i-rerenderovanja-u-react-aplikacijama-kako-funkcionisu-i-kako-ih-optimizovati-40cj</link>
      <guid>https://dev.to/jelena_petkovic/razumevanje-renderovanja-i-rerenderovanja-u-react-aplikacijama-kako-funkcionisu-i-kako-ih-optimizovati-40cj</guid>
      <description>&lt;p&gt;Kada kreiramo aplikacije u React-u, često se suočavamo sa pojmovima renderovanje (rendering) i rerenderovanje (re-rendering) komponenata. Iako ovo na prvi pogled može delovati jednostavno, stvari postaju zanimljive kada se upetljaju različiti state menadžment sistemi poput &lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;Redux&lt;/code&gt;, ili kada ubacimo lifecycle hook-ove poput &lt;code&gt;useEffect&lt;/code&gt;. Ako želite da vaša aplikacija bude brza i efikasna, razumevanje ovih procesa je ključno.&lt;/p&gt;

&lt;h2&gt;
  
  
  Šta je Renderovanje?
&lt;/h2&gt;

&lt;p&gt;Renderovanje je proces u kojem React prikazuje vaš korisnički interfejs (UI) na ekranu, bazirano na stanju (&lt;code&gt;state&lt;/code&gt;-u) ili prosleđenim vrednostima (&lt;code&gt;props&lt;/code&gt;). Kada se vaša komponenta prvi put prikazuje, to se zove prvo renderovanje.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kako Funkcioniše Prvo Renderovanje (Initial Render)?
&lt;/h2&gt;

&lt;p&gt;Kada se komponenta prvi put "montira" na DOM, evo šta se događa:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Inicijalizacija state-a:&lt;/strong&gt;&lt;br&gt;
Bilo da koristite &lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;props&lt;/code&gt; ili &lt;code&gt;Redux&lt;/code&gt;, inicijalni state komponente se kreira.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Render funkcija:&lt;/strong&gt;&lt;br&gt;
React prolazi kroz JSX kod i generiše virtuelni DOM baziran na trenutnom stanju.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Kreira virtuelni DOM&lt;/strong&gt; (Virtual DOM) za trenutno stanje komponente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Upoređivanje (diffing):&lt;/strong&gt;&lt;br&gt;
Virtuelni DOM se upoređuje sa pravim DOM-om (pošto je prvi render, svi elementi će biti potpuno prikazani).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Prikazivanje:&lt;/strong&gt;&lt;br&gt;
Komponenta se prikazuje na ekranu.&lt;br&gt;
Jednom kada je komponenta prikazana, sledeći izazov je rerenderovanje.&lt;/p&gt;
&lt;h2&gt;
  
  
  Rerenderovanje (Re-render): Kada i Zašto?
&lt;/h2&gt;

&lt;p&gt;Rerenderovanje se dešava svaki put kada se stanje ili props promene. Da li ste kliknuli na dugme koje menja broj na ekranu? Promenili ste vrednost u Redux store-u? Sve te akcije mogu dovesti do toga da React ponovo prikaže komponentu, i tu dolazi do rerenderovanja.&lt;/p&gt;
&lt;h2&gt;
  
  
  Kako Funkcioniše Rerenderovanje?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Detekcija promene state-a:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Kod &lt;code&gt;useState&lt;/code&gt;, kada pozovete &lt;code&gt;setState&lt;/code&gt;, React zna da treba da ažurira komponentu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kod &lt;code&gt;Redux&lt;/code&gt;-a, kada se promeni vrednost u &lt;code&gt;store&lt;/code&gt;, svaka komponenta povezana sa tim delom stanja se ponovo renderuje.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Trigger renderovanja:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kada se stanje promeni, React kreira novi virtuelni DOM baziran na toj promeni.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upoređivanje (diffing):&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React upoređuje novi virtuelni DOM sa starim i izračunava koje promene treba primeniti. Ovo je jedan od načina na koji React optimizuje renderovanje.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prikaz promena:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nakon što su promene izračunate, React ih primenjuje na stvarni DOM. Tako se samo promenjeni delovi stranice ponovo prikazuju.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Koje Komponente Se Rerenderuju?
&lt;/h2&gt;

&lt;p&gt;Nisu sve komponente pogođene svakom promenom. React rerenderuje samo one komponente koje:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Korisite lokalni &lt;code&gt;state&lt;/code&gt;:&lt;/strong&gt; &lt;br&gt;
Ako koristite &lt;code&gt;useState&lt;/code&gt;, komponenta se rerenderuje svaki put kada se pozove &lt;code&gt;setState&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Koriste &lt;code&gt;Redux&lt;/code&gt; state:&lt;/strong&gt; &lt;br&gt;
Ako vaša komponenta zavisi od Redux stanja (preko &lt;code&gt;useSelector&lt;/code&gt; ili &lt;code&gt;connect&lt;/code&gt;), biće ponovo renderovana kada se taj deo stanja promeni.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Koriste &lt;code&gt;props&lt;/code&gt;:&lt;/strong&gt; &lt;br&gt;
Ako se &lt;code&gt;props&lt;/code&gt; vrednost promeni, komponenta se ponovo renderuje sa novim vrednostima.&lt;/p&gt;
&lt;h2&gt;
  
  
  Optimizacija Rerenderovanja
&lt;/h2&gt;

&lt;p&gt;Naravno, nije uvek idealno da se sve komponente bespotrebno ponovo renderuju. Ako želimo da aplikacija radi brzo i efikasno, evo nekoliko tehnika za optimizaciju:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Memoizacija Komponenti&lt;/strong&gt;&lt;br&gt;
React nudi funkcionalnost za memoizaciju komponenata preko &lt;code&gt;React.memo&lt;/code&gt;. Ako vaša komponenta ne zavisi od promena props ili state-a, možete je "zapamtiti", pa će se ponovo renderovati samo kada se relevantne vrednosti promene.&lt;/p&gt;

&lt;p&gt;Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const MemoizedComponent = React.memo(MyComponent);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Memoizacija Funkcija i Vrednosti&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Da biste izbegli ponovno kreiranje funkcija ili vrednosti pri svakom renderu, koristite &lt;code&gt;useCallback&lt;/code&gt; za memoizaciju funkcija i &lt;code&gt;useMemo&lt;/code&gt; za memoizaciju vrednosti.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;useCallback&lt;/code&gt; vam omogućava da memoizujete funkciju i sprečite njeno ponovno kreiranje sve dok se zavisnosti ne promene.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;useMemo&lt;/code&gt; memoizuje rezultat funkcije, tako da se ne računa ponovo na svakom renderu.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Primer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const increment = useCallback(() =&amp;gt; {
  setCount(prevCount =&amp;gt; prevCount + 1);
}, []);

const expensiveCalculation = useMemo(() =&amp;gt; {
  return count * 2;
}, [count]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Redux Optimizacija&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ako koristite Redux, možete dodatno optimizovati aplikaciju pomoću memoizovanih selektora kao što je reselect. To omogućava da se izbegne ponovno renderovanje komponenata koje nisu pogođene promenom stanja.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lifecycle Hook-ovi i Rerenderovanje
&lt;/h2&gt;

&lt;p&gt;U klasičnim React klasama, koristili smo &lt;code&gt;shouldComponentUpdate&lt;/code&gt; da kontrolišemo kada će se komponenta ponovo renderovati. U funkcionalnim komponentama, ovaj koncept se može simulirati pomoću &lt;code&gt;useEffect&lt;/code&gt; i memoizacije.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zaključak
&lt;/h2&gt;

&lt;p&gt;Renderovanje i rerenderovanje su ključni za prikaz korisničkog interfejsa u React aplikacijama, ali pravilno razumevanje i optimizacija tih procesa može napraviti razliku između spore i super brze aplikacije. Ispravno korišćenje &lt;code&gt;memoizacije&lt;/code&gt;, &lt;code&gt;useCallback&lt;/code&gt;, &lt;code&gt;useMemo&lt;/code&gt;, kao i pažljivo rukovanje &lt;code&gt;Redux&lt;/code&gt;-om, pomaže da izbegnemo nepotrebne re-rendere i održimo naše aplikacije brzim i responzivnim.&lt;/p&gt;

&lt;p&gt;Primer Koda: Renderovanje i Rerenderovanje u Akciji&lt;br&gt;
Evo primera komponente koja koristi useState, Redux i memoizaciju da optimizuje renderovanje:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState, useEffect, useCallback, useMemo } from 'react';
import { useSelector, useDispatch } from 'react-redux';

const MyComponent = () =&amp;gt; {
  // Lokalni state
  const [count, setCount] = useState(0);

  // Redux state
  const reduxValue = useSelector(state =&amp;gt; state.someValue);
  const dispatch = useDispatch();

  // Memoizacija funkcije kako bi se izbeglo ponovno kreiranje na svakom renderu
  const increment = useCallback(() =&amp;gt; {
    setCount(prevCount =&amp;gt; prevCount + 1);
  }, []);

  // Memoizacija izračunate vrednosti
  const expensiveCalculation = useMemo(() =&amp;gt; {
    return count * 2;
  }, [count]);

  // Efekat koji se pokreće samo pri promeni reduxValue
  useEffect(() =&amp;gt; {
    console.log("Redux value changed:", reduxValue);
  }, [reduxValue]);

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;Count: {count}&amp;lt;/p&amp;gt;
      &amp;lt;p&amp;gt;Expensive Calculation: {expensiveCalculation}&amp;lt;/p&amp;gt;
      &amp;lt;button onClick={increment}&amp;gt;Increment&amp;lt;/button&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; dispatch({ type: 'SOME_ACTION' })}&amp;gt;
        Dispatch Redux Action
      &amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kao što vidimo, ovde se koristi kombinacija lokalnog &lt;code&gt;state&lt;/code&gt;-a, &lt;code&gt;Redux&lt;/code&gt;-a, memoizacije i &lt;code&gt;useEffect&lt;/code&gt; hook-a da bi aplikacija bila što efikasnija.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>webcomponents</category>
    </item>
  </channel>
</rss>
