Почему нам не нужно связывать функцию стрелки в React? - PullRequest
0 голосов
/ 25 октября 2018

Мы все знаем, что нам нужно связать функцию в React, чтобы она работала.Я знаю, зачем нам это связывать.

Но я не уверен, почему нам не нужно связывать функцию стрелки.

Пример: использование функции стрелки (связывание не требуется)

handleClick = () => {
  this.setState({
    isToggleOn: !this.state.isToggleOn
  });

};

Теперь, используя функцию (требуется привязка)

this.handleClick = this.handleClick.bind(this);

handleClick() {
  this.setState({
    isToggleOn: !this.state.isToggleOn
  });

};

Я не спрашиваю, зачем нам нужносвязать в функции.Я просто хочу знать, почему привязка не требуется в функции стрелки.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

В кавычках MDN :

Выражение функции со стрелкой имеет более короткий синтаксис, чем выражение функции, и не имеет собственных this, arguments, super или new.target.Эти функциональные выражения лучше всего подходят для функций, не относящихся к методам, и их нельзя использовать в качестве конструкторов.

Далее,

До функций стрелок каждая новая функция определяла свою собственнуюthis значение (в зависимости от того, как была вызвана функция, новый объект в случае конструктора, неопределенный в вызовах функций строгого режима, базовый объект, если функция вызывается как «метод объекта» и т. Д.).Это оказалось далеко не идеальным с объектно-ориентированным стилем программирования.

Таким образом, по сути, причина, по которой нам не нужно привязываться, заключается в том, что this не существует в контекстефункция стрелкиТаким образом, он переходит на следующий уровень и использует this, который находит там.

0 голосов
/ 25 октября 2018

Просто потому, что функция стрелки не имеет следующего в своем контексте:

  • this
  • arguments
  • super
  • new.target

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

...