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.

(param1, param2, …, paramN) => { statements } 
(param1, param2, …, paramN) => expression

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 🙂 .

Hvala ti što si pročitao/la naš blog post. Prijavi se na naš newsletter i primaj besplatan edukativan sadržaj direktno u inbox!

Happy coding!

Similar Posts