Kada radimo sa klasnim komponentama u React-u koristeći TypeScript, često se postavlja pitanje da li je potrebno i obavezno definisati props
i state
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 props
i state
, kao i prednosti i nedostatke različitih pristupa.
Korišćenje konstruktora
Kada koristiti konstruktor:
1. Inicijalizacija stanja (state
) na osnovu props
:
Ako state
zavisi od props
ili ako treba da izvršiš dodatnu logiku prilikom inicijalizacije stanja, konstruktor je najbolji izbor.
2. Postavljanje početnih vrednosti stanja:
Kada želiš da postaviš početno stanje komponente, konstruktor je tradicionalan način za to.
Primer:
interface IMyComponentProps {
initialCount: number;
}
interface IMyComponentState {
count: number;
}
class MyComponent extends React.Component<IMyComponentProps, IMyComponentState> {
constructor(props: IMyComponentProps) {
super(props);
this.state = {
count: props.initialCount,
};
}
render() {
return <div>Count: {this.state.count}</div>;
}
}
Kada ne koristiti konstruktor
1. Jednostavna inicijalizacija stanja:
Ako state
nije složen i ne zavisi od props
, možeš koristiti direktnu inicijalizaciju stanja bez konstruktora.
2. Nema potrebe za složenom logikom:
Ako ne treba da izvršiš dodatnu logiku u vezi sa props
ili state
, možeš postaviti state
direktno na nivou klase.
Primer:
interface IMyComponentProps {
message: string;
}
interface IMyComponentState {
count: number;
}
class MyComponent extends React.Component<IMyComponentProps, IMyComponentState> {
state: IMyComponentState = {
count: 0,
};
render() {
return <div>Count: {this.state.count}</div>;
}
}
Prednosti i nedostaci različitih pristupa
Korišćenje konstruktora:
Prednosti:
-
Složenija inicijalizacija: Omogućava postavljanje
state
na osnovuprops
i izvršenje dodatne logike pre nego što komponenta renderuje. - Kontrola: Omogućava preciznu kontrolu nad inicijalizacijom i možeš lako dodati ili izmeniti logiku inicijalizacije.
Nedostaci:
- Više koda: 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.
- Više složenosti: Uvođenje dodatne složenosti ako jednostavna inicijalizacija može biti obavljena bez konstruktora.
Direktna inicijalizacija (state
) van konstruktora:
Prednosti:
- Jednostavnost: Manje koda i jasniji kod za jednostavne komponente.
-
Bolja čitljivost: Komponente su često čitljivije kada se koristi direktna inicijalizacija za
state
.
Nedostaci:
-
Ograničena fleksibilnost: Ne možeš lako inicijalizovati
state
na osnovuprops
ili dodati složenu logiku prilikom inicijalizacije.
Zaključak
-
Koristi konstruktor ako treba da inicijalizuješ
state
na osnovuprops
ili ako imaš složenu logiku koja treba da se izvrši pre renderovanja komponente. -
Izbegni konstruktor ako tvoja inicijalizacija
state
može biti jednostavno postavljena direktno na nivou klase i ne zahteva dodatnu logiku.
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.