Учебник по JavaScript и React
День 10: Передача аргументов обработчику событий в React
Узнайте, как передавать аргументы с помощью функции стрелки и метода привязки

В большинстве случаев нам может понадобиться передать аргументы нашему обработчику событий. Как мы можем сделать это в React? Мы не можем напрямую передать аргумент обработчику событий, потому что в этом случае функция обработчика событий будет вызываться автоматически еще до того, как вы нажмете кнопку. Мы увидим это ниже в нашем примере. Существует два способа передачи аргументов: через функцию Arrow и метод Bind.
Функция стрелки
<button onClick = {(e)} => this.handleClick(id,e)>Delete</button>
id может быть любым состоянием или реквизитом, а e — объектом события реакции.
Метод привязки
<button onClick={this.handleClick.bind(this,id)>Delete</button>
В обоих случаях аргумент e (объект события), представляющий событие React, будет передан в качестве второго аргумента после идентификатора. В функции Arrow мы должны передать ее явно, а в методе привязки аргументы передаются автоматически.
Создайте новый файл newStudent.js в папке нашего компонента и поместите в него этот код.
import React , {Component} from 'react' ;
class NewStudent extends Component {
//state without a constructor
state = {
id=1,
name : 'Kim',
};
//Event Handler Arrow Function
handleClick = () => {
console.log('Button Click')
};
render() {
return (
<div>
<h1>Hey, {this.state.name}</h1>
<button onClick = {this.handleClick} >Click Me</button>
</div>
)
}}
export default NewStudent
Передача аргумента обработчику события
Удалить этот код
<button onClick = {this.handleClick} >Click Me</button>
и добавьте эту строку
<button onClick = {this.handleClick('101')} >Click Me</button>
а также изменить функцию handleClick
handleClick = (id) => {
console.log(id)
};
Ваш App.js должен выглядеть так
import './App.css';
import NewStudent from './components/newStudent';
import React from 'react';
import Student from './components/student';
import Welcome from './components/welcome';
function App() {
return (
<div className="App">
<Welcome />
<Student roll='1'/>
<NewStudent />
</div>
);
}
export default App;

Итак, даже не нажимая кнопку, React показывает нам идентификатор в консоли, а мы не хотим, чтобы это произошло. React вызывает функцию до того, как мы нажмем кнопку.
Добавьте новую функцию handleClickArg.
Функция стрелки
Мы используем функцию Arrow для передачи аргумента. Отредактируйте файл newStudent.js
import React , {Component} from 'react' ;
class NewStudent extends Component {
//state without a constructor
state = {
id: 101,
name : 'Kim',
};
//Event Handler Arrow Function
handleClick = (id) => {
console.log(id)
};
handleClickArg = () => {
this.handleClick(this.state.id);
}
render() {
return (
<div>
<h1>Hey, {this.state.name}</h1>
<button onClick = {this.handleClickArg} >Click Me</button>
</div>
)}}
export default NewStudent
мы создали функцию handleClickArg и передали ее ссылку на событие нажатия кнопки. Как только вы нажмете кнопку, функция handleClickArg вызовет функцию handleClick, и это зарегистрирует идентификатор учащегося.
Метод привязки
В методе Bind мы просто используем метод bind, чтобы сделать то же самое. Попробуйте это в своем коде и проверьте, получите ли вы тот же результат?
<button
onClick={this.handleClick.bind(this, this.state.id)}>Click</button>
Вывод:
Самое важное в изучении чего-то вроде React или Angular или любого другого фреймворка на любом языке — это увидеть, как передаются данные. Что происходит, когда мы делаем это, и чего не происходит, когда мы делаем то, таким образом вы можете узнать последствия своих действий.
Фото автора Джеймс Харрисон на Unsplash