Почему стрелочные функции в ReactJS считаются собственностью?

Итак, я пробовал два разных подхода по мере необходимости, то есть со стрелочными функциями и функциями без стрелок, и при написании кода я заметил что-то странное в обоих из них, функцию без стрелок, т.е.

  close() {
    this.setState({
      show: false
    });
  }

рассматриваются как метод (ы), что верно, поскольку они являются функциями, Почему стрелочные функции в ReactJS считаются собственностью?

Но когда я пишу функцию со стрелкой, например:

  goToNextPage = () => {
    this.setState(({ page }) => ({ page: page + 1 }));
  };

Почему стрелочные функции в ReactJS считаются собственностью?

Это считается свойством, я совершенно не понимаю этого поведения. Это что-то не так с VSCode или это совсем другое?

aClassProperty = () => { ... } означает, что вы создаете новое свойство класса для каждого нового экземпляра класса, а свойство является стрелочной функцией, так что это правильно. aMethod() используется всеми экземплярами класса, но в React вы обычно создаете новую функцию в конструкторе, в любом случае привязывая ее к this, поэтому конечный результат будет таким же.
Tholle 06.11.2018 00:00

@Tholle Хорошо, понял, но можно ли тогда использовать функцию стрелки в качестве props?

user10415043 06.11.2018 00:15

Я не совсем уверен, что понимаю, что вы имеете в виду. Можно ли сделать <MyComponent aProp = {this.aClassProperty} />? Конечно.

Tholle 06.11.2018 00:17

@Tholle да, это именно то, что я имею в виду, спасибо

user10415043 06.11.2018 00:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
4
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

class MyClass { aClassProperty = <whatever_value>; } означает, что вы создаете новый свойство класса для каждого нового экземпляра класса. Свойство может иметь любое значение, но в этом случае свойство является стрелочной функцией, так что это правильно.

aMethod() используется всеми экземплярами класса, но в React вы обычно создаете новую функцию в конструкторе, в любом случае привязывая ее к this, поэтому конечный результат будет таким же.

Не могли бы вы подробнее рассказать, почему React рассматривает стрелочные функции как свойство?

user10415043 06.11.2018 01:01

@YashKaranke Это не конкретно для React, это как Выложено предложение JavaScript. Неважно, пишете ли вы = 2, = "2", = function() { ... } или даже = () => { ... }. Все они рассматриваются как свойства класса.

Tholle 06.11.2018 01:05

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