В чем разница между "(.....);" и "{......}" в реакции?

Я получаю сообщение об ошибке, показанное на изображении для приведенного ниже кода:

handlechange(event) {
    this.setState (prevState => {
      return(
      checked : !prevState.checked
    );});
}

Но когда я меняю круглые скобки после «возврата» на фигурные, все работает нормально. Я имею в виду, что происходит под капотом? Что заставляет ошибку исчезнуть?

handlechange(event) {
    this.setState (prevState => {
      return{
      checked : !prevState.checked
    }});
}

В чем разница между "(.....);" и "{......}" в реакции?

Изображение не отображается, поэтому я просто вставляю ошибку в комментарии. «Ошибка синтаксического анализа: неожиданный токен» на восклицательном знаке в «проверено:! PrevState.checked»

Alternating pulse 16.12.2018 17:06

Ну, один - это вызов функции, а другой - литерал объекта

Code Maniac 16.12.2018 17:07

@CodeManiac - () после return не формируют вызов функции.

T.J. Crowder 16.12.2018 17:11

@ T.J. Краудер о да. спасибо за указание.

Code Maniac 16.12.2018 17:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
4
115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это не React. Ваш первый пример - это просто недопустимый синтаксис JavaScript. Ваш второй пример - это допустимый синтаксис, возвращающий объект, созданный с помощью инициализатора объекта (часто называемого «литералом» объекта, {checked: !prevState.checked}).


¹ () после return оборачивает выражение, а затем внутри выражения у вас есть checked: !prevState.checked, который выглядит как помеченный оператор. Но вы не можете поместить помеченный оператор там, где ожидается выражение.


Боковое примечание: еще один способ записи - использовать деструктуризацию свойств в списке параметров и сокращенное свойство в инициализаторе объекта:

handlechange(event) {
    this.setState(({checked}) => {
      checked = !checked;
      return {checked};
    });
}

каково значение ({..}) во второй строке вашего кода. Фигурные скобки обозначают объект JS, но как насчет круглых скобок?

Alternating pulse 16.12.2018 18:58

В стрелочной функции, если список параметров является чем-то более сложным, чем простой список параметров, содержащий только одно имя параметра, вы должны поместить этот список в (). Так, например, a => { /* ... */} - это правильная стрелочная функция, а a, b => { /* ... */ } - нет, потому что ему нужен () вокруг списка параметров: (a, b) => { /* ... */ }. Во второй строке кода выше, поскольку я использую деструктуризацию в списке параметров ({checked}), это больше не простой список параметров, поэтому список должен быть в ().

T.J. Crowder 16.12.2018 19:10

Общая картина: эта деструктуризация извлекает значение свойства checked из аргумента, переданного в функцию обратного вызова setState, и помещает его в параметр с именем checked. Таким образом, this.setState(({checked}) => { /* ... */ }) фактически такой же, как this.setState(prevState => { let checked = prevState.checked; /* ... */ }).

T.J. Crowder 16.12.2018 19:11

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

{
    key: value
}

это юридическое определение объекта, но

(
    key: value
)

не является.

Другие вопросы по теме