В начале своей карьеры при изучении синтаксиса 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>; }
}