передача обработчика событий в качестве ссылки

#javascript #reactjs #jsx

Вопрос:

это упражнение из codecademy. Почему требуется передавать обработчик событий в качестве ссылки? почему я не могу ввести onClick={goBack()} вместо onClick={goBack}

 const goBack = () => {
    setQuestionIndex(prevQuestionIndex => prevQuestionIndex - 1);
  }

....

 <button onClick={goBack}>
          Go Back
 </button>
 

Ответ №1:

Когда вы используете onClick={goBack()} , вы вызываете / вызываете функцию goBack , и результат goBack вызова передается в onClick

Живая демонстрация

Демонстрация Codesandbox

Но если вы используете as onClick={goBack} , то в этом случае вы передаете a reference в onClick , что означает, что когда пользователь click нажмет на кнопку, он автоматически вызовет функцию. Вам не нужно вызывать функцию самостоятельно.


1) Допустим, рассмотрим функцию со значением

 <button onClick={fun()}> button with function reference</button>
 

Если вы передаете значение функции, то в первую очередь она выдает a warning в консоли как:

 Warning:
Expected `onClick` listener to be a function, instead got a value of `string` type.
 

и когда вы вызываете его, он выдает error как

 Error
Expected `onClick` listener to be a function, instead got a value of `string` type.
 

2) Если вы используете как

 <button onClick={fun}> button with function reference</button>
 

затем функция fun будет передана как a prop , и при использовании нажмите на функцию, тогда эта функция fun будет вызвана автоматически

Комментарии:

1. @Hussam Нет, оба не одно и то же

Ответ №2:

goBack является ссылкой на функцию, goBack() вызывает эту функцию и возвращает результат.

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

Ответ №3:

Если вы передадите вызов функции вместо ссылки, он вызовет функцию, как только ваш компонент отобразит, ссылка привязана к обработчику щелчка, следовательно, когда срабатывает определенное событие, оно будет вызывать ссылку.

Вот фрагмент, чтобы увидеть это, песочница