Весь вопрос сводится к тому, какова разница между func
и func()
и () => func()
. Это не имеет ничего общего с React.
Если у меня есть функция
function func() {
console.log(42);
}
Тогда я могу ссылаться на сам объект функции через func
. Это полезно, если мне нужно передать функцию другой функции , например, setTimeout
setTimeout(func, 1000); // calls func after 1000ms
setTimeout
ожидает функцию, которую она может вызвать после заданного времени ожидания.
Аналогично в React, click
, change
и т. Д. - это все реквизиты, которые ожидают, что им будет передана функция, которая вызывается при возникновении события.
func()
с другой стороны вызывает функцию . Это необходимо сделать, если вам действительно нужно вызвать функцию прямо тогда и там.
Это означает, что если я сделаю
setTimeout(func(), 1000);
тогда я бы сначала позвонил func
и передал бы его возвращаемое значение в setTimeout
(то есть I позвонил бы func
сейчас, setTimeout
не вызывает его позже ). Так что это обычно неверно , если func
не возвращает саму функцию, и это действительно возвращаемое значение, которое я хочу передать другой функции.
() => func()
- это просто новая функция, которая вызывает только func
. Для всех намерений и целей это эквивалентно func
:
function func() {
console.log(42);
}
const anotherFunc = () => func();
func();
anotherFunc();
И, конечно, если func
ожидает аргумент, я должен передать его при переносе в другую функцию, что и делает x => func(x)
.
Другая часть - это то, как работают функции, назначенные свойствам объекта и this
. Короче говоря, то, на что this
ссылается внутри функции (без стрелки), зависит от того, как функция называется . Делая
this.foo();
// or
var bar = this.foo;
bar();
дает два разных результата, потому что this.foo()
и bar()
- это два разных способа вызова функции. Для получения дополнительной информации см. Как получить доступ к правильному `this` внутри обратного вызова?