Редактировать
Меню
    наверх

    Практическое примение ES6 (стрелочные функции и шаблонные строки)

    Новый версия стандарта языка JavaScript вышла еще в июне 2015 года, и внесла много нововведений в синтаксис. Я хочу показать как можно пользоваться этой версией на практике. Начнем с того что полной поддержки в браузерах, на сегодняшний день, нет. Но нас выручает проект Babel (нужен для конвертирования нового синтаксиса в старый, а где не справляется, то добавляются полифилы). Есть много способов использовать Babel в своем проекте начиная от простого компилирования кода, до систем сборки, принцип не меняется.

    Стрелочные функции

    Начнем со стрелочных функций, синтаксис у них такой () => {}, круглые скобки не обязательны в некоторых случаях, так же как и фигурные скобки.

    Разберем круглые скобки. Их можно не писать когда у функции один аргумент. Но если у функции нет аргументов, то скобки обязательны

    Пример:

    state => {
        return state
    }
    

    Более практический пример:

    const arr = [1, 2, 3, 4, 5];
    
    const arr2 = arr.map(item => {
        return item + 1
    })
    
    console.log(arr2) // [2, 3, 4, 5, 6];
    

    Во 2 примере мы перебираем массив, с помощью метода map и если нам надо выводить еще и индекс элемента, то скобки писать придеться

    Пример:

    const arr = [1, 2, 3, 4, 5];
    
    const arr2 = arr.map((item, index) => {
        return item + index
    })
    
    console.log(arr2) // [1, 3, 5, 7, 9];
    

    На этом с круглыми скобками мы закончим, на очереде у нас фигурные скобки, с ними немного посложнее будет

    Вот 2 примера:

    const myFunc = (arr) => {
        return arr.push("some string");
    }
    
    const myFunc2 = (arr) => arr.push("some string");
    

    Эти 2 функции одинаковы, хотя и пишуться немного по разному. Главное правило, если вы сомневаетесь писать скобки или нет, это если нету скобок то функция автоматически возвращает все что после знака “стрелки” =>. Это можно использовать при написании более короткого кода.

    Если пропустить эти функции через Babel, то получим это:

    "use strict";
    
    var myFunc = function myFunc(arr) {
        return arr.push("some string");
    };
    
    var myFunc2 = function myFunc2(arr) {
        return arr.push("some string");
    };
    

    Как вы можете убедиться они одинаковы. И еще одно дополнение, если вам нужно возвращать обьект из функции таким способом:

    const myFunc2 = (foo) => {bar: foo};
    

    То у вас ничего не получиться, давайте посмотрим на код после транспиляции:

    "use strict";
    
    var myFunc2 = function myFunc2(foo) {
      bar: foo;
    };
    

    Что здесь происходит? Фигурные скобки воспринимаются как часть функции, по этому нитерпритатор не может выполнить выражение bar: foo;. Для А чтобы вернуть обьект из функции надо просто обернуть круглыми скобками наш обьект

    const myFunc2 = (foo) => ({bar: foo});
    

    И результат будет:

    "use strict";
    
    var myFunc2 = function myFunc2(foo) {
      return { bar: foo };
    };
    

    Применение в React JS

    Используем эти знания на приктике, а именно в написании компонентов для React JS. И так у нас задача вывести список элементов в меню, меню формируется динамически, напрмер формируется на сервере и приходит к нам в виде JSON обьекта, в котором есть массив обьектов, а в обьекте содержиться вся информация о элементах меню

    const data = [
        {
            "title": "Пункт 1",
            "url": "http://somesite.com"
        },
        {
            "title": "Пункт 2",
            "url": "http://somesite.com"
        },
        {
            "title": "Пункт 3",
            "url": "http://somesite.com"
        }
    ]
    

    В шаблоне мы создаем компонент Menu, и при получении данных начинаем их перебирать и отображать

    <ul className="menu">
        {data.map((item, index) => {
            return(
                <li key={index}>
                    <a href={item.url}>
                        {item.title}
                    </a>
                </li>
            )
        })}
    </ul>
    

    Убрать круглые скобки мы несможем, потому что второй аргумент index обязательный он нужен для внутреннего устройства React компонентов, а вот фигурные скобки мы можем убрать

    <ul className="menu">
        {data.map((item, index) =>
            <li key={index}>
                <a href={item.url}>
                    {item.title}
                </a>
            </li>
        )}
    </ul>
    

    ES6 Template Strings (шаблонная строка)

    Шаблонная строка это “синтаксический сахар” для конкатенации строк, берет свое начало еще с CoffeeScript, синтаксис очень прост `, одна “перевернутая одинарная кавычка” в начале и одна в конце выражения, все пробелы внутри заменяются знаком +{знак пробела}+. Для того чтобы задать выражение используется такой синтаксис ${выражение}.

    Пример:

    const foo = 23;
    const bar = 34;
    
    const baz =  нас есть ${foo + bar} яблок`;
    
    console.log(baz) // "У нас есть 57 яблок":
    

    Произошло следующее, Babel перевел это в следующий код

    "use strict";
    
    var foo = 23;
    var bar = 34;
    
    var baz = "У нас есть " + (foo + bar) + " яблок";
    console.log(baz) // "У нас есть 57 яблок":
    

    В этом примере видно, что писать такие строки стало легче, не нужно думать добавиться ли пробел или нет, теперь попробуем использовать это на приктике.

    const guid = () => {
      const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
      return `${s4()+s4()}-${s4()}-${s4()}-${s4()}-${s4()+s4()+s4()}`;
    }
    

    Это функция для генерации GUID, при каждом вызове этой функции будет сгенерирован новый GUID, а теперь посмотрим как бы выглядел код без шаблонной строки

    const guid = () => {
      const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
      return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + (s4() + s4() + s4());;
    }
    

    Сегодня мы разобрали стрелочные функции и шаблонные строки, но это лишь малая часть всех нововведений, что было добавленно в язык JavaScript, эта статья будет еще дорабатываться и корректироваться.

    Дополнительные ссылки

    Спецификация ECMAScript

    Информация о посте
    Колличество слов
    1473
    Дата создания
    26 сентября 2016
    Комментарии