Méthode d'écriture : 1. Utilisez "onClick={this.handleClick}" ; 2. Utilisez "onClick={this.handleClick.bind(this)}" ; 3. Utilisez "{(params)=>this.handleClick ( paramètres)}".
L'environnement d'exploitation de ce tutoriel : système Windows 10, React version 17.0.1, ordinateur Dell G3.
Allons droit au but. Tout d'abord, donnons la bonne façon d'ajouter un événement à un bouton :
La bonne façon d'ajouter un événement onclick à un bouton.
// handleClick utilise
pour définir
onClick = { this.handleClick }
// handleClick用箭头函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick }></Button>
handleClick est défini comme ceci :
handleClick = () => { // do something here};
ou
// poignéeCliquez utilise (fonction ordinaire) pour définir
onClick = { this .handleClick.bind(this) }
// handleClick用普通函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick.bind(this) }></Button>
handleClick est défini comme ceci :
handleClick () { // do something here }
// handleClick peut être défini en utilisant
/(fonction ordinaire)
onClick = { (params ) => this.handleClick(params) }
// handleClick可以是箭头函数,也可以是普通函数<Button onClick = { (params) => this.handleClick(params) }></Button>
Ensuite, analysons pourquoi il est correct d'écrire comme ceci :
Comprenez ce problème avec les phrases suivantes :
La fonction flèche n'a pas son propre ceci, donc c'est ceci : ceci du contexte lorsqu'elle est définie
La fonction ordinaire a son propre ceci, donc c'est ceci : ceci du contexte contexte lorsqu'il est exécuté
Regardons d'abord le premier. Une façon d'écrire :
Le code ci-dessous est : ajouter un événement onclick (un complete jsx) pour un bouton
// 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;
Cliquez sur le bouton et imprimez le pointeur vers examplePage this:
this: examplePage {props: Object, context: {}, refs: {}, updater: Object, state: {} , …}
Analyse :
Voyons d'abord ce que console.log(this) affichera si bind(this) n'est pas utilisé :
// 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;
Cliquez sur le bouton et imprimez ceci :
this: undefined
Analyse :
Remarque : dans la version stricte, la valeur par défaut n'est plus une fenêtre, mais undéfini
Le code du module est toujours un code en mode strict.
Toutes les parties de a ClassDeclaration ou ClassExpression sont du code en mode strict.
Vous devez donc utiliser bind pour changer ce pointeur, c'est-à-dire :
render() { return ( <p> // 用bind改变this指向 <Button onClick = { this.handleClick.bind(this) }>click me</Button> </p> )}
Analyse :
render() { return ( <p> // 通过箭头函数传参 <Button onClick = { (params) => this.handleClick(params) }></Button> </p> )}
<Button onClick = { () => this.handleClick() }></Button>
Donc, quand aucun paramètre n'est transmis, vous ne pouvez écrire que comme ceci :
<Button onClick = { this.handleClick }></Button>
Résumé
Il est possible de répondre aux trois premières questions//定义handleClick事件 handleClick = () => { // do something here }; //为onClick绑定handleClick事件处理函数 <Button onClick = {this.handleClick}></Button> // 不传参 <Button onClick = {(param) => this.handleClick(param) }></Button> // 传参
推荐学习:《react视频教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!