В начале своей карьеры при изучении синтаксиса React и ES6 JavaScript может возникнуть путаница, когда использовать фигурные скобки {}, а когда - круглые скобки ().

Как используются фигурные скобки {}

Фигурные скобки {} - это особый синтаксис JSX. Он используется для оценки выражения JavaScript во время компиляции. Выражение JavaScript может быть переменной, функцией, объектом или любым кодом, который преобразуется в значение.

Возьмем пример.

  • Оценка переменной JavaScript
const yellowStyle={color: 'yellow'} 
<Star style={yellowStyle} />

что то же самое как

<Star style={{color: 'yellow'}} />
  • Оценка функции или обработчика событий
class PopUp extends React.Component {
  // es7 way of setting default state
  state = {
    visible: true;
  }
  render() {
    return <Modal onClose={this._handleClose}/>;
  }
  _handleClose = () => {
    this.setState({ visible: false });
  }
}

Это не следует путать с методами класса в ES6, которые также используют фигурные скобки {}

class StarsComponent {
  constructor(size) {
    this.size = size;
  }
  // Curly braces are used to define a method body in a class
  get size() {
    return this.size;
  }
  
  // ReactJS library comes with a predefined render() method
  render() {
    return <div>*</div>;
  }
}

const stars = new StarsComponent(5);

console.log(stars.size); // 5

Как используются круглые скобки ()?

Круглые скобки используются в стрелочной функции для возврата объекта.

() => ({ name: 'Amanda' })  // Shorthand to return an object

Это эквивалентно:

() => {
   return { name : 'Amanda' }
}

Круглые скобки используются для группировки многострочных кодов в операторе JavaScript return, чтобы предотвратить автоматическую вставку точки с запятой в неправильное место.

Поговорим о некоторых основах.

В JavaScript нет необходимости добавлять точку с запятой. Механизм JavaScript автоматически вставляет точку с запятой при первой возможности в строке после оператора return. Если движок JavaScript помещает точку с запятой там, где ее не должно быть, ваш код не скомпилируется.

Давайте посмотрим на следующий код.

Нэй, это не компилируется.

class StarsComponent {
  constructor(size) {
    this.size = size;
  }
  
  render() {
    return <div>  // <--JavaScript engine inserts semicolon here
           *
           </div>
  }
}

Ура, это работает.

class StarsComponent {
  constructor(size) {
    this.size = size;
  }
  
  render() {
    return (<div> 
            *
            </div>) // <--JavaScript engine inserts semicolon here
  }
}

Почему? Когда вы помещаете открывающую скобку в одну строку с return:

return (

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

return (
    ... 
    ...
); <-- inserts semicolon at the end of parenthesis

Для однострочного оператора не нужно заключать его в квадратные скобки.

class StarsComponent {
  constructor(size) {
    this.size = size;
  }
  
  // Not required to wrap brackets around a single line of code
  render() {
    return <div>*</div>;
  }
}