1. Механизм привязки событий React
В React привязка событий реализуется через синтаксис JSX. Вы можете привязать обработчики событий непосредственно к атрибутам элементов, например onClick
и onMouseOver
т. д. Когда соответствующее событие инициируется, будет вызван обработчик связанного события.
React использует механизм синтетических событий ( SyntheticEvent
) для инкапсуляции базовых собственных событий браузера для достижения межбраузерной согласованности. Этот механизм обеспечивает одинаковое поведение обработки событий в разных браузерах и платформах, что снижает проблемы совместимости.
Во-вторых, различные методы привязки событий.
В React существует множество способов привязки событий. Ниже приведены некоторые распространенные способы:
1. Привяжите функцию-обработчик событий в конструкторе:
Этот метод подходит для ситуаций, когда некоторые операции инициализации необходимо выполнить в конструкторе. Привяжите обработчик событий в конструкторе и явно this
привяжите его к обработчику.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
console.log('Button clicked');
}
render() {
return <button onClick={this.handleClick}>Click me</button>;
}
}
Привязка обработчика событий в конструкторе требует дополнительного кода, что немного громоздко, но это официально рекомендуемый способ.
2. Явное связывание во время вызова:
Когда вызывается обработчик событий, он явно привязывается через привязку this
.
class MyComponent extends React.Component {
handleClick() {
console.log('Button clicked');
}
render() {
return <button onClick={this.handleClick.bind(this)}>Click me</button>;
}
}
Новые функции создаются каждый раз при рендеринге, что может повлиять на производительность.
3. Используйте функции стрелок:
Характер стрелочных функций позволяет автоматически привязывать текущий контекст без дополнительных шагов привязки. Этот метод более краток и позволяет избежать this
проблем с привязкой вручную.
class MyComponent extends React.Component {
handleClick = () => {
console.log('Button clicked');
};
render() {
return <button onClick={this.handleClick}>Click me</button>;
}
}
Синтаксис краток, и текущий контекст автоматически привязывается без дополнительных шагов привязки.
4. Передайте функцию стрелки напрямую (рекомендуется):
В событии триггера напрямую передайте стрелочную функцию, такую как следующий код, который также можно автоматически привязать, this
чтобы сделать код более понятным.Другим преимуществом этого метода является то, что передавать параметры очень удобно.
class MyComponent extends React.Component {
handleClick() {
console.log('Button clicked');
}
render() {
return <button onClick={() => this.handleClick()}>Click me</button>;
}
}
Параметры передачи стрелочной функции
class MyComponent extends React.Component {
handleClick(name, age) {
console.log("name is ",name," age is ",age);//name is jack, age is 18
}
render() {
return <button onClick={() => this.handleClick("jack", 18)}>Click me</button>;
}
}
Это удобнее при передаче параметров, а внутри стрелочной функции можно передавать любые параметры.