Функция стрелки без фигурных скобок

Я новичок в ES6 и React, и я продолжаю видеть функции стрелок. Почему некоторые функции стрелок используют фигурные скобки после толстой стрелки, а некоторые используют круглые скобки? Например:

const foo = (params) => (
    <span>
        <p>Content</p>
    </span>
);

против.

const handleBar = (e) => {
    e.preventDefault();
    dispatch('logout');
};

Спасибо за любую помощь!

Ответы

Ответ 1

В скобках возвращается одно значение, фигурные скобки выполняют несколько строк кода.

Ваш пример выглядит запутанным, потому что он использует JSX, который выглядит как несколько "строк", но на самом деле просто компилируется в один "элемент".

Вот еще несколько примеров, которые все делают одно и то же:

const a = (who) => "hello " + who + "!";
const b = (who) => (
    "hello " + 
    who + 
    "!"
);
const c = (who) => {
  return "hello " + who + "!";
}; 

Вы также часто увидите круглые скобки вокруг объектных литералов, потому что это способ избежать того, чтобы парсер рассматривал его как кодовый блок:

const x = () => {} // Does nothing
const y = () => ({}) // returns an object

Ответ 2

Можно также использовать фигурные скобки, чтобы предотвратить возврат одной функции стрелки в одну строку - или сделать очевидным для следующего разработчика, что одна функция стрелок в одной строке не должна, в этом случае, возвращать что-либо.

Например:

const myFunc = (stuff) => { someArray.push(stuff) }
const otherFunc = (stuff) => someArray.push(stuff)

console.log(myFunc())    // --> logs undefined
console.log(otherFunc()) // --> logs result of push which is new array length

Ответ 3

Фактически в портфеле, когда кто-то использует фигурные скобки в объявлении функции стрелки, он равен ниже:

const arrow = number => number + 1;

|||

const arrow = (number) => number + 1;

|||    

const arrow = (number) => ( number + 1 );

|||

const arrow = (number) => { return number + 1 };

Ответ 4

В первом примере правая часть функции стрелки показывает одно выражение, заключенное оператором группировки:

const foo = (params) => (
  <span>
    <p>Content</p>
  </span>
);

Аналогичным сопоставимым случаем будет следующее:

const foo = (params) => (<span><p>Content</p></span>);

Различие в приведенных выше случаях с использованием отдельных выражений состоит в том, что правая часть является возвращаемым значением функции.

С другой стороны, если вы используете фигурные скобки, JavaScript будет понимать это как утверждение:

const foo = (params) => {} // this is not an object being returned, it just an empty statement 

Поэтому использование инструкции - хороший старт для вас, чтобы иметь в ней код, несколько строк, и для этого потребуется использование "return", если функция предназначена для возврата значения:

const foo = (params) => {
    let value = 1; 
    return value;
}

Если вы хотите вернуть пустой объект в кратчайшей форме:

const foo = (params) => ({}) 

См. Тесты