Чтобы правильно понять, почему это так, давайте удостоверимся, что мы знаем разницу между выражением и блоком .
на самом базовом уровне. выражение - это фрагмент кода, представляющий какое-либо значение.Итак, 123
, a + b + c
, calculateSomething()
, это все выражения.Выражения не включают в себя точки с запятой.
A block в JS - это список выражений.Эти выражения заключены в фигурные скобки { }
и разделены точками с запятой.
Теперь вернемся к функции стрелки.Функция стрелки может иметь две формы:
(some, args) => <an expression>
(some, args) => { <an expression>; <an expression>; ... }
Обратите внимание, что первая форма принимает выражение , одну.Точки с запятой должны быть только, если вы используете блок , как во второй форме.
JSX работает так:
<input onChange={ <an expression> } />
Вы ставите имяреквизит, который вы хотите, знак равенства, а затем одно выражение в фигурных скобках.Помните, что в отдельных выражениях нет точек с запятой.
Функция стрелки - это выражение.Итак, если бы вы поставили здесь точку с запятой ...
<input onChange={ () => 'hello' ; } />
JS увидит выражение, затем увидит точку с запятой и произойдет сбой, потому что его там не должно быть.