React添加事件

来源:https://www.cnblogs.com/yansj1997/archive/2020/04/14/12700007.html
-Advertisement-
Play Games

React添加事件,和DOM上添加事件類似,但又有細微的不同. React添加事件,需要註意: 1.React的事件命名採用小駝峰(camelCase)的命名方式,DOM採用的是純小寫的方式; 2.使用JSX語法時,需要傳入一個函數作為事件的處理函數,DOM傳入的是一個字元串(雖然DOM中傳入的事件 ...


React添加事件,和DOM上添加事件類似,但又有細微的不同.

React添加事件,需要註意:

1.React的事件命名採用小駝峰(camelCase)的命名方式,DOM採用的是純小寫的方式;

2.使用JSX語法時,需要傳入一個函數作為事件的處理函數,DOM傳入的是一個字元串(雖然DOM中傳入的事件名稱也可以是函數名稱,但數據類型還是一個字元串)

DOM元素添加事件

<a href="#" onclick="testClick();">點擊我</a>

React中添加事件

<button onClick={this.testClick}>點擊我</button>

React中不能通過返回false來阻止元素的預設行為,只能通過顯示的設置preventDefault()來阻止預設的行為,而DOM中阻止元素預設行為的方式有兩種:一種是內聯腳本直接返回false,另外一種是事件處理函數中顯示調用preventDefault方法.

DOM中阻止預設行為的方式:

<a href="http://www.baidu.com" onclick="return false;">點擊我</a>
這種內聯到HTML中的方式,可以通過直接返回false的方式阻止a元素預設行為跳轉,也可以通過在響應事件中顯示調用preventDefault方法.如:
<!--註意傳入的參數需要是固定的event,不能修改為其他的值-->
<a href="http://www.baidu.com" onclick="testClick(event);">點擊我</a>
<script>
    function testClick(e) {
        console.log("處理一些其他事情");
        e.preventDefault();
    }
</script>

React中阻止元素預設行為的方法:

testClick(e){
    console.log("處理些其他事情");
    e.preventDefault();
}
<a href="http://www.baidu.com" onClick={this.testClick}>點擊我</a>

事件處理函數中不需要傳入任何參數.

React中元素綁定事件

主要有個this的指向問題,在以類的繼承方式定義的組件中,事件處理函數中的this並不是指向當前的組件.如果我們直接在React元素中使用this就會報異常,因為this並不是指向該組件.那麼我們就需要手動的將this指向到當前組件,才可以使用this,將this綁定到當前組件常用的方法有4中:

1.通過箭頭函數

<a href="http://www.mop.com" onClick={(e) => this.testClick(e)}>點擊我</a>

2.將事件處理函數使用箭頭函數的方法來寫

testClick = (e) => {
    console.log("處理點事情");
    e.preventDefault();
}
<a href="http://www.baidu.com" onClick={this.testClick}>點擊我吧</a>

3.在調用的地方綁定通過bind綁定;

<a href="http://www.baidu.com" onClick={this.handleClickEvent.bind(this)}>點擊我</a>

4.在構造函數constructor中提前綁定;

    constructor(props) {
        super(props);
        this.state = {
            name: this.props.name,
            date: new Date(),
            id: this.props.id
        };
        this.handleClickEvent = this.handleClickEvent.bind(this);
    }

<a href="http://www.baidu.com" onClick={this.handleClickEvent}>點擊我吧</a>

向事件處理函數傳遞參數

很多操作中,我們都需要向事件的處理函數傳遞參數,如在刪除或標記一條數據的時候,需要把當前數據的ID傳遞給事件處理函數,讓它知道去處理哪條數據.

常用的傳遞數值的方式有兩種:

1.箭頭函數的方式

delUser(id, e){
    console.log(id);
}
<a href="http://www.baidu.com" onClick={(e) => this.delUser(this.state.id, e)}>刪除</a>

2.通過bind向監聽函數傳參,需要註意在類組件中定義的監聽函數,事件對象e要在傳遞參數的後面

delUser(id, e){
    console.log(id);
}
<a href="http://www.baidu.com" onClick={this.delUser.bind(this, this.state.id)}>刪除</a>

其實無論是使用箭頭函數,還是通過bind綁定監聽事件的方式傳參,事件響應函數中事件對象e,在參數列表中都是排在最後.

goRenren(id,name, e){
    console.log(id);
    console.log(name);
}
<button onClick={(e) => this.goRenren(this.state.id,this.state.name, e)}>刪除</button>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先是安裝 在index.js中引入樣式 跟著官網點組件 import React,{Component} from 'react'; import { Button } from 'antd'; class Counter extends Component{ render(){ console. ...
  • 生命周期函數指的是組件在某一時刻會自動執行的函數 constructor可以看成一個類的普通生命周期函數,但不是react獨有的生命周期函數 render() 是數據發生變化時會自動執行的函數,因此屬於react的生命周期函數 mounting只在第一次渲染時會執行 import React,{Co ...
  • 目錄 為什麼分析asap asap概述 asap源碼解析—Node版 參考 1.為什麼分析asap 在之前的文章 "async和await是如何實現非同步編程?" 中的 “淺談Promise如何實現非同步執行” 小節,提到了 Promise 非同步執行是通過 "asap" 這個庫來實現的。所以為了進一步深 ...
  • 3-1什麼是數組?變數用來存儲數據,一個變數只能存儲一個內容,如果要存儲多個數據怎麼辦?此時就需要用到數組,數組是一個值的集合,每個值都有一個索引號,從0開始,每個索引都有一個相應的值,根據需要添加更多數值。 1 <script type="text/javascript"> 2 var myarr ...
  • 括弧功能未實現,後續更 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <tit ...
  • 眾所周知,Vue 2.x 的數據綁定是通過 defineProperty。而在 Vue 3.x 的設計中,數據綁定是通過 Proxy 實現的,這兩者到底有何異同? 一、definePropety defineProperty 是 Object 的一個方法,可以在對象上新增或編輯某個屬性,可編輯的內容 ...
  • 實例:獲取button元素離頁面頂部的距離 ref寫在html元素上 import React,{Component,Fragment} from 'react'; import Child from './Child'; class Counter extends Component{ const ...
  • 1. var p1 = new Promise((resolve, reject) => { }); var p2 = p1.then( result => { }, error => { } ); //可以看到p1和p2都是promise,還可以看到狀態 console.log(p1); cons ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...