Menulis: 1. Gunakan "onClick={this.handleClick}"; this.handleClick(params)}".
Persekitaran pengendalian tutorial ini: Sistem Windows 10, bertindak balas versi 17.0.1, komputer Dell G3.
Mari kita mula-mula berikan cara yang betul untuk menulis acara untuk butang:
Tambah untuk butang Cara yang betul untuk menulis acara onclick ialah
// handleClick ditakrifkan dengan
onClick = { this.handleClick }
// handleClick用箭头函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick }></Button></p> <p>handleClick ditakrifkan seperti berikut: </p> <pre class="brush:php;toolbar:false">handleClick = () => { // do something here};
atau
// handleClick digunakan (fungsi biasa) untuk mentakrifkan
onClick = { this.handleClick.bind(this) }
// handleClick用普通函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick.bind(this) }></Button>
handleClick ditakrifkan seperti berikut:
handleClick () { // do something here }
// handleClick boleh ditakrifkan menggunakan
/(fungsi biasa)
onClick = { (params) => this.handleClick (params) }
// handleClick可以是箭头函数,也可以是普通函数<Button onClick = { (params) => this.handleClick(params) }></Button>
Mari kita analisa mengapa penulisan seperti ini betul:
Fahami masalah ini dengan ayat berikut:
Fungsi anak panah tidak mempunyai ini sendiri, jadi ini adalah: ini konteks apabila ia ditakrifkan
Fungsi biasa mempunyai ini sendiri, jadi ini ialah: ini konteks apabila ia dilaksanakan
Mari kita lihat cara pertama penulisan:
Kod yang diberikan di bawah ialah : Tambah acara onclick untuk butang (jsx lengkap)
// 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;
Klik butang dan cetak ini menunjuk ke contohHalaman:
ini: examplePage {props: Object, context : {}, refs: {}, updater: Object, state: {}, …}
Analisis:
Mari kita lihat dahulu apa console.log(this) akan keluarkan jika bind(this) tidak digunakan:
// 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;
Klik butang untuk mencetak ini:
ini: tidak ditentukan
Analisis:
Nota: Dalam versi yang ketat, lalai ini bukan tetingkap lagi, tetapi tidak ditentukanJadi anda perlu menggunakan bind untuk menukar penunjuk ini, iaitu:Kod modul sentiasa kod mod ketat.
Semua bahagian ClassDeclaration atau ClassExpression ialah kod mod ketat.
render() { return ( <p> // 用bind改变this指向 <Button onClick = { this.handleClick.bind(this) }>click me</Button> </p> )}
render() { return ( <p> // 通过箭头函数传参 <Button onClick = { (params) => this.handleClick(params) }></Button> </p> )}
<Button onClick = { () => this.handleClick() }></Button>
<Button onClick = { this.handleClick }></Button>
Tiga soalan pertama boleh dijawab
//定义handleClick事件 handleClick = () => { // do something here }; //为onClick绑定handleClick事件处理函数 <Button onClick = {this.handleClick}></Button> // 不传参 <Button onClick = {(param) => this.handleClick(param) }></Button> // 传参
推荐学习:《react视频教程》
Atas ialah kandungan terperinci Apakah beberapa cara untuk menulis peristiwa klik tindak balas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!