Arrow i map funkcije

U ovom blog postu pričaćemo o tome, zašto su nastale arrow funkcije, kako da ih koristimo unutar map funkcije. I na kraju videćemo kako da naši JSX izrazi budu čitljiviji uz pomoć arrow funkcije.

JavaScript ES6 uvodi arrow funkcije. Postoje dva glavna faktora su uticala na uvođenje arrow funkcija, a to su potreba za kraćim zapisom funkcija i ponašanje objekta this.

// function expression
var x = function(x, y) {
   return x * y;
}
// arrow function expression
const x = (x, y) => x * y;

Razlike između regularnog i arrow izraza funkcije ogledaju se u kraćem zapisu arrow funkcije nego što je to slučaj kod regularne funkcije. Kod arrow funkcije možemo da izostavimo ključnu reč return, i u nekim slučajevima možemo izostaviti zagrade, male zagrade ako imamo samo jedan ulazni parametar, i vitičaste zagrade ako u telu funkcije postoji samo jedan izraz. Dodatno, važno je spomenuti ponašanje objekta this. Obični izraz funkcije definiše svoj objekat this, dok arrow funkcija koristi this objekat iz konteksta u kom je definisana.

Ako želiš da saznaš više i bolje da razumeš objekat this poseti ovaj link.

Osnovna sintaksa arrow funkcije:

Ukoliko u telu funkcije (unutar vitičastih zagrada), imamo samo jedan izraz tada vitičaste zagrade možemo izostaviti, ali ukoliko imamo vise izraza tada su one obavezne.

Kada imamo samo jedan parametar, tada su male zagrade opcione, možemo ih pisati, ali i ne moramo:

singlePram => { statements }
(singlePram) => { statements }

U slučaju kada imamo više ulaznih parametara tada su male zagrade obavezne:

(param1, param2) = { ... }

Ovaj slučaj nije dozvoljen: param1, param2 = { … }

Kada nemamo ni jedan ulazni parametar to pisemo na sledeći način:

() => { statements }

Map funkcija i arrow funkcija

Upotrebu arrow funkcije unutar map funkcije najbolje ćemo pokazati na primeru. Prvo ćemo definisati niz kroz koji želimo da iteriramo, a cilj nam je da za svaki element niza izračunamo koliko ima karaktera odnosno da izračunamo dužinu svakog elementa.

let fruits = ['Orange','Bananas', 'Lemon'];

//regularna funkcija
fruits.map(function(item) {
return item.length;
}); // [6, 7, 5]


//arrow funkcija
fruits.map((item) => {
return item.length;
}); // [6, 7, 5]

//kada imamo samo jedan parametar možemo izostaviti male zagrade
fruits.map(item => {
return item.length;
}); // [6, 7, 5]

//kako imamo samo jedan izraz možemo izostaviti naredbu return
//mozemo izostaviti i vitičaste zagrade
fruits.map(item => item.length); // [6, 7, 5]

Kako da tvoj JSX izraz bude još čitljiviji

Imamo listu kao što je to prikazano na slici ispod:

import React, {Component} from 'react';
import './App.css';

class App extends Component {
constructor(props) {
super(props);
this.state = {
list: [{
personId: 0,
firstName: 'Ross',
lastName: 'Geller',
age: 34
},{
personId: 1,
firstName: 'Chandler',
lastName: 'Bing',
age: 34
}]
}
}
render () {
return (
<div className="App">
<div>
...
</div>
</div>
);
}

}

export default App;

Sada želimo da iteriramo kroz lsitu i da ispišemo njen rezultat to možemo uraditi na sledeći način:

{this.state.list.map( item => {
return (
<div key={item.personId}>
<span>{item.firstName}</span>
<span>{item.lastName}</span>
<span>{item.age}</span>
</div>
);
})}

Dodatno, možemo ukloniti vitičaste zagrade, kao i return naredbu.

{this.state.list.map(item => 
<div key={item.personId}>
<span>{item.firstName}</span>
<span>{item.lastName}</span>
<span>{item.age}</span>
</div>
)}

Sada tvoj JSX izraz izgleda mnogo jasnije i čitljivije 🙂 .