Funkcionalne i Klasne Komponente u React-u sa TypeScript-om

WHAT TO KNOW - Sep 17 - - Dev Community
<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   Funkcionalne i Klasne Komponente u React-u sa TypeScript-om
  </title>
  <style>
   body {
            font-family: sans-serif;
        }
        h1, h2, h3 {
            margin-top: 2em;
            margin-bottom: 1em;
        }
        code {
            background-color: #f2f2f2;
            padding: 0.2em 0.5em;
            border-radius: 3px;
            font-family: monospace;
        }
        pre {
            background-color: #f2f2f2;
            padding: 1em;
            border-radius: 5px;
            overflow-x: auto;
        }
        img {
            max-width: 100%;
        }
  </style>
 </head>
 <body>
  <h1>
   Funkcionalne i Klasne Komponente u React-u sa TypeScript-om
  </h1>
  <h2>
   Uvod
  </h2>
  <p>
   React je popularna JavaScript biblioteka za izgradnju korisničkih sučelja. Jedna od ključnih karakteristika React-a je koncept komponenti, koji omogućuje modularnost i ponovnu upotrebu koda. U React-u, komponente mogu biti definirane na dva glavna načina: funkcionalne komponente i klasne komponente. U ovom članku ćemo istražiti ove dvije vrste komponenti u React-u, posebno u kontekstu TypeScript-a, moćnog jezika za tipiziranje koji poboljšava čitljivost i stabilnost koda.
  </p>
  <p>
   Funkcionalne i klasne komponente u React-u sa TypeScript-om pružaju razne prednosti, uključujući:
  </p>
  <ul>
   <li>
    <strong>
     Poboljšana čitljivost i stabilnost koda:
    </strong>
    TypeScript dodaje statičko tipiziranje, što pomaže u otkrivanju pogrešaka tijekom kompilacije i u sprječavanju pogrešaka tijekom izvršavanja.
   </li>
   <li>
    <strong>
     Jasnija struktura koda:
    </strong>
    Komponenti se mogu bolje organizirati i održavati pomoću TypeScript-a, što poboljšava modularnost.
   </li>
   <li>
    <strong>
     Bolja refaktorizacija:
    </strong>
    TypeScript omogućuje da se kôd bolje refaktorira i mijenja bez straha od grešaka.
   </li>
   <li>
    <strong>
     Lakoću održavanja:
    </strong>
    Kada se koristi TypeScript, kôd je lakše razumjeti, mijenjati i održavati, što čini rad s React-om lakšim.
   </li>
  </ul>
  <h2>
   Ključni Koncepti
  </h2>
  <h3>
   Funkcionalne Komponente
  </h3>
  <p>
   Funkcionalne komponente su funkcije koje primaju objekat props (properties) kao argument i vraćaju React element. Ove komponente su jednostavne za pisanje i čitanje, te su često preferirane za komponente koje nemaju stanje ili logičke metode.
  </p>
  <pre>
<code>
import React from 'react';

const Greeting: React.FC&lt;{ name: string }&gt; = ({ name }) =&gt; {
  return <h1>Zdravo, {name}!</h1>;
};

export default Greeting;
</code>
</pre>
  <p>
   U ovom primjeru,
   <code>
    Greeting
   </code>
   komponenta je definirana kao funkcija koja prima
   <code>
    name
   </code>
   prop i vraća React element sa porukom "Zdravo, [ime]!".
  </p>
  <h3>
   Klasne Komponente
  </h3>
  <p>
   Klasne komponente su JavaScript klase koje produžuju
   <code>
    React.Component
   </code>
   klasu i koriste metode kao što su
   <code>
    render()
   </code>
   ,
   <code>
    constructor()
   </code>
   ,
   <code>
    componentDidMount()
   </code>
   ,
   <code>
    componentDidUpdate()
   </code>
   , itd. Ova vrsta komponenti koristi se za upravljanje stanjem i kompleksnom logikom, kao i za interakciju sa životnim ciklusom React-a.
  </p>
  <pre>
<code>
import React from 'react';

class Counter extends React.Component {
  constructor(props: any) {
    super(props);
    this.state = { count: 0 };
  }

  increment = () =&gt; {
    this.setState((prevState) =&gt; ({ count: prevState.count + 1 }));
  };

  render() {
    return (
      <div>
        <h1>Brojilac: {this.state.count}</h1>
        <button onclick="{this.increment}">Povećaj</button>
      </div>
    );
  }
}

export default Counter;
</code>
</pre>
  <p>
   U ovom primjeru,
   <code>
    Counter
   </code>
   komponenta upravlja stanjem
   <code>
    count
   </code>
   i nudi gumb za povećanje brojača. Koristi
   <code>
    this.state
   </code>
   i
   <code>
    this.setState
   </code>
   za upravljanje stanjem.
  </p>
  <h3>
   TypeScript u React-u
  </h3>
  <p>
   TypeScript donosi tipiziranje u JavaScript kod, što čini kôd čitljivijim i stabilnijim. U React-u, TypeScript se može koristiti za definiranje tipova za props, state, metode i druge elemente.
  </p>
  <pre>
<code>
import React, { useState } from 'react';

interface CounterProps {
  initialValue: number;
}

const Counter: React.FC<counterprops> = ({ initialValue }) =&gt; {
  const [count, setCount] = useState(initialValue);

  const increment = () =&gt; {
    setCount(count + 1);
  };

  return (
    <div>
      <h1>Brojilac: {count}</h1>
      <button onclick="{increment}">Povećaj</button>
    </div>
  );
};

export default Counter;
</counterprops></code>
</pre>
  <p>
   U ovom primjeru,
   <code>
    Counter
   </code>
   komponenta koristi TypeScript za definiranje tipa
   <code>
    CounterProps
   </code>
   , koji uključuje
   <code>
    initialValue
   </code>
   prop. Također, koristimo TypeScript za definiranje tipa za
   <code>
    count
   </code>
   state.
  </p>
  <h2>
   Praktične Primjene
  </h2>
  <h3>
   Primjer: Webshop
  </h3>
  <p>
   U webshop-u, funkcionalne komponente se mogu koristiti za prikaz proizvoda, dok klasne komponente mogu upravljati košaricom i procesom naručivanja. TypeScript može se koristiti za definiranje tipova za proizvode, košaricu i korisnike.
  </p>
  <h3>
   Primjer: Blog Platforma
  </h3>
  <p>
   U blog platformi, funkcionalne komponente se mogu koristiti za prikaz postova, dok klasne komponente mogu upravljati komentarima i korisničkim profilima. TypeScript može se koristiti za definiranje tipova za postove, komentare i korisnike.
  </p>
  <h2>
   Korak po Korak Upute
  </h2>
  <h3>
   Postavljanje Projecta
  </h3>
  1.
  <strong>
   Kreiranje projekta:
  </strong>
  Koristite Create React App sa TypeScript-om:
    ```

bash
    npx create-react-app my-app --template typescript


    ```

2.
  <strong>
   Pokretanje projekta:
  </strong>
  Uđite u direktorij projekta i pokrenite ga:
    ```

bash
    cd my-app
    npm start


    ```
  <h3>
   Kreiranje Komponente
  </h3>
  1.
  <strong>
   Kreiranje funkcionalne komponente:
  </strong>
  Napravite novu datoteku s imenom
  <code>
   Greeting.tsx
  </code>
  i umetnite sljedeći kod:
    ```

typescript
    import React from 'react';

    const Greeting: React.FC&lt;{ name: string }&gt; = ({ name }) =&gt; {
      return
  <h1>
   Zdravo, {name}!
  </h1>
  ;
    };

    export default Greeting;


    ```

2.
  <strong>
   Kreiranje klasne komponente:
  </strong>
  Napravite novu datoteku s imenom
  <code>
   Counter.tsx
  </code>
  i umetnite sljedeći kod:
    ```

typescript
    import React from 'react';

    class Counter extends React.Component {
      constructor(props: any) {
        super(props);
        this.state = { count: 0 };
      }

      increment = () =&gt; {
        this.setState((prevState) =&gt; ({ count: prevState.count + 1 }));
      };

      render() {
        return (
  <div>
   <h1>
    Brojilac: {this.state.count}
   </h1>
   <button onclick="{this.increment}">
    Povećaj
   </button>
  </div>
  );
      }
    }

    export default Counter;


    ```

3.
  <strong>
   Importiranje i korištenje komponenti:
  </strong>
  U datoteci
  <code>
   App.tsx
  </code>
  , importirajte i koristite kreirane komponente:
    ```

typescript
    import React from 'react';
    import Greeting from './Greeting';
    import Counter from './Counter';

    function App() {
      return (
  <div>
   <greeting name="Ivan">
   </greeting>
   <counter>
   </counter>
  </div>
  );
    }

    export default App;


    ```
  <h3>
   Koristiti TypeScript
  </h3>
  1.
  <strong>
   Definirati tipove za props:
  </strong>
  U
  <code>
   Greeting.tsx
  </code>
  , dodajte tip za props:
    ```

typescript
    import React from 'react';

    interface GreetingProps {
      name: string;
    }

    const Greeting: React.FC
  <greetingprops>
   = ({ name }) =&gt; {
      return
   <h1>
    Zdravo, {name}!
   </h1>
   ;
    };

    export default Greeting;


    ```

2.
   <strong>
    Definirati tipove za state:
   </strong>
   U
   <code>
    Counter.tsx
   </code>
   , dodajte tip za state:
    ```

typescript
    import React from 'react';

    interface CounterState {
      count: number;
    }

    class Counter extends React.Component {
      constructor(props: any) {
        super(props);
        this.state = { count: 0 };
      }

      increment = () =&gt; {
        this.setState((prevState: CounterState) =&gt; ({ count: prevState.count + 1 }));
      };

      render() {
        return (
   <div>
    <h1>
     Brojilac: {this.state.count}
    </h1>
    <button onclick="{this.increment}">
     Povećaj
    </button>
   </div>
   );
      }
    }

    export default Counter;


    ```
   <h3>
    Prednosti TypeScript-a
   </h3>
   *
   <strong>
    Otkrivanje pogrešaka tijekom kompilacije:
   </strong>
   TypeScript otkriva pogreške u tipiziranju tijekom kompilacije, što sprečava greške tijekom izvršavanja.
*
   <strong>
    Bolja čitljivost:
   </strong>
   TypeScript poboljšava čitljivost koda, što olakšava razumijevanje i održavanje.
*
   <strong>
    Refaktorizacija:
   </strong>
   TypeScript omogućuje sigurnu refaktorizaciju koda bez straha od grešaka.
   <h2>
    Izazovi i Ograničenja
   </h2>
   *
   <strong>
    Stepen učenja:
   </strong>
   Naučiti TypeScript može zahtijevati dodatno vrijeme i trud.
*
   <strong>
    Kompilacija:
   </strong>
   Kompilacija TypeScript-a može dodati vrijeme na proces gradnje projekta.
*
   <strong>
    Sukob s postojećim JavaScript-om:
   </strong>
   Ponekad može biti teško pomiriti postojeći JavaScript kod s TypeScript-om.
   <h2>
    Usporedba s Alternativama
   </h2>
   *
   <strong>
    Plain JavaScript:
   </strong>
   Plain JavaScript je lakši za učenje, ali manje stabilan i čitljiv.
*
   <strong>
    Flow:
   </strong>
   Flow je još jedan alat za statičko tipiziranje, ali manje popularan od TypeScript-a.
*
   <strong>
    ReasonML:
   </strong>
   ReasonML je funkcionalni jezik koji se kompilira u JavaScript, ali može biti složen za učenje.
   <h2>
    Zaključak
   </h2>
   Funkcionalne i klasne komponente u React-u s TypeScript-om pružaju moćan način za izgradnju robusnih i održivih React aplikacija. TypeScript donosi dodatnu sigurnost i čitljivost, što čini rad s React-om lakšim i učinkovitijim.
   <h2>
    Poziv na Akciju
   </h2>
   Počnite koristiti TypeScript u svojim React projektima! Isprobajte navedene korake i pogledajte prednosti koje TypeScript nudi. Zatim, istražite druge značajke TypeScript-a i njegove mogućnosti za poboljšanje vaših React aplikacija.
  </greetingprops>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

Napomena: Ovaj HTML kod sadrži osnovnu strukturu članka. Za dodavanje slika i daljnje detalje, možete izmijeniti kod prema potrebi. Također, ovaj članak pruža samo osnovne informacije o funkcionalnim i klasnim komponentama u React-u s TypeScript-om. Za potpuno razumijevanje teme, preporučujemo proučavanje službene dokumentacije React-a i TypeScript-a.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player