Heim > Artikel > Web-Frontend > Welche verschiedenen Möglichkeiten gibt es, React-Click-Ereignisse zu schreiben?
Schreibmethode: 1. Verwenden Sie „onClick={this.handleClick}“ 2. Verwenden Sie „onClick={this.handleClick.bind(this)}“ 3. Verwenden Sie „{(params)=>this.handleClick (params)}".
Die Betriebsumgebung dieses Tutorials: Windows 10-System, Reaktionsversion 17.0.1, Dell G3-Computer.
Die richtige Methode zum Hinzufügen eines Onclick-Ereignisses zu einer Schaltfläche
onClick = { this .handleClick.bind(this) }
// handleClick用箭头函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick }></Button>
handleClick = () => { // do something here};
Pass-Parameter// handleClick kann mit
// handleClick用普通函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick.bind(this) }></Button>Als nächstes analysieren wir, warum es richtig ist, so zu schreiben:
Diese Zeigeranalyse
Verstehen Dieses Problem mit den folgenden Sätzen:
1. onClick = { this.handleClick } + PfeilfunktionSchauen wir uns zuerst das erste an. Eine Möglichkeit zum Schreiben:
handleClick () { // do something here }Klicken Sie auf die Schaltfläche und drucken Sie den Zeiger auf examplePage this:
Analyse:
Wenn auf die Schaltfläche geklickt wird, wird das handleClick-Ereignis als Handling-Funktion bezeichnet.
Das zeigt also auf examplePage
Mal sehen, ob die Pfeilfunktion in eine normale Funktion geändert wird. Situation:
2. onClick = { this.handleClick.bind(this) } + gewöhnliche FunktionSchauen wir uns zuerst an Was wird von console.log(this) ausgegeben, wenn bind(this) nicht verwendet wird:
// handleClick可以是箭头函数,也可以是普通函数<Button onClick = { (params) => this.handleClick(params) }></Button>
Hinweis: In der strikten Version ist dies standardmäßig nicht mehr Fenster, sondern undefiniert. Der Modulcode ist immer strikter Moduscode.
Alle Teile einer ClassDeclaration oder ClassExpression sind strikt Moduscode.Sie müssen also bind verwenden, um diesen Zeiger zu ändern, d der Renderfunktion (die auf die Klasse examplePage zeigt) als Variable in handleClick ist ursprünglich eine gewöhnliche Funktion, und dies ist die Funktion this des Ausführungskontexts (d. h. undefiniert), aber weil bind(this) übergeben wurde, zeigte dies darauf examplePage
Zu diesem Zeitpunkt verweist dies also auf examplePage, was das Problem löst, dass dies undefiniert ist
Gemäß Diese Idee: Solange das onClick-Antwortereignis mit einer Pfeilfunktion geschrieben wird, zeigt diese beim Aufruf auf die Komponentenklasse und es wird kein Problem gebenDies ist jedoch nicht möglich, da React () => this.handleClick() direkt analysiert und handleClick aufgerufen wird, was onClick = „Das Ergebnis des Aufrufs von handleClick“ entspricht. Also, wenn keine Parameter übergeben werden, Sie kann nur so schreiben:
Dann, wenn keine Parameter übergeben werden, schreiben Sie einfach:// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component { // 2. 定义handleClick事件 handleClick = () => { console.log(this); //3. this指向examplePage } render() { return ( <p> // 1. 为onClick绑定 handleClick事件处理函数 <Button onClick = { this.handleClick }>click me</Button> </p> ) }}export default examplePage;
// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component { // 2. !将箭头函数改为普通函数 handleClick () { console.log(this); // 3. this 为 undefined } render() { return ( <p> // 1. 为onClick绑定 handleClick事件处理函数 <Button onClick = { this.handleClick }>click me</Button> </p> ) }}export default examplePage;Zusammenfassung
//定义handleClick事件 handleClick = () => { // do something here }; //为onClick绑定handleClick事件处理函数 <Button onClick = {this.handleClick}></Button> // 不传参 <Button onClick = {(param) => this.handleClick(param) }></Button> // 传参
推荐学习:《react视频教程》
Das obige ist der detaillierte Inhalt vonWelche verschiedenen Möglichkeiten gibt es, React-Click-Ereignisse zu schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!