国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

react——事件綁定

這篇具有很好參考價值的文章主要介紹了react——事件綁定。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????react有兩種寫法,一種是類組件,也叫有狀態(tài)組件;一種是函數(shù)式組件,也叫無狀態(tài)組件,而后引入了react hooks,函數(shù)式組件也能修改狀態(tài)。在這兩種組件中的事件綁定的原理一樣,寫法不一樣。這篇文章主要就是記錄這兩種組件中的事件綁定寫法。

react——事件綁定

?

一、前提說明

????????重點是記錄兩種組件中事件綁定使用的區(qū)別,避免下次使用的時候還犯迷糊,在下面的寫法中,可能出現(xiàn)同一類組件中多種寫法,只要自己選擇自己喜歡的那種寫就可以了,沒必要每種都要會,能看的懂就可以。想直接拿來用的,可以直接跳過原理,看使用案例,對原理感興趣的可以回頭來看看事件原理。在react中,事件的寫法都是on+事件類型(第一個字母大寫),如點擊事件(onClick),鼠標事件(onMouseOver ,onMouseOut)

二、事件綁定的原理

????????react中的事件都是合成事件,react并不是將click事件綁定到了div的真實DOM上,而是在document處監(jiān)聽了所有的事件,當事件發(fā)生并且冒泡到document處的時候,React將事件內(nèi)容封裝并交由真正的處理函數(shù)運行。這樣的方式不僅僅減少了內(nèi)存的消耗,還能在組件掛在銷毀時統(tǒng)一訂閱和移除事件。

????????另外冒泡到document上的事件也不是原生的瀏覽器事件,而是由react自己實現(xiàn)的合成事件(SyntheticEvent)。因此我們?nèi)绻幌胍鞘录芭莸脑捳{(diào)用event.stopProppagation()方法是無效的。而應該調(diào)用event.preventDefault()。

(一)事件注冊

????????組件更新或者裝載時,在給dom增加合成事件時,需要將增加的target傳入到document進行判斷,給document注冊原生事件回調(diào)為dispatchEvent(統(tǒng)一的事件分發(fā)機制)。

(二)事件存儲

????????EventPluginHub負責管理React合成事件的callback,它將callback存儲到listennerBank中,另外還存儲了負責合成事件的Plugin,Event存儲到listennerbank中,每一個元素在listennerBank中會有唯一的key。

(三)事件觸發(fā)執(zhí)行

????????點擊時冒泡到docunment中,觸發(fā)注冊原生事件的回調(diào)dispatchEvent,獲取到觸發(fā)這個事件的最深層元素,事件執(zhí)行利用react的批處理機制。

(四)合成事件

????????循環(huán)所有類型的eventPlugin,對應每個事件類型,生成不同的事件池,如果是空,則生成新的,有則用之前的,根據(jù)唯一key獲取到指定的回調(diào)函數(shù),再返回帶有參數(shù)的回調(diào)函數(shù)。

(五)總流程

?-- >? 組件裝載/更新

?-- >? 新增/刪除事件

?-- >? eventplugin添加到ListennerBank中監(jiān)聽事件

?-- >? 觸發(fā)事件

?-- >? 生成合成事件

?-- >? 通過唯一key獲取到指定函數(shù)

?-->? ?執(zhí)行指定回調(diào)函數(shù)

?-- >? 執(zhí)行完畢后釋放

三、事件使用案例

(一)類組件的事件綁定

import React, { Component } from 'react'

export default class App1 extends Component {
    test2Fn() {
        console.log('test2');
    }
    test3Fn = () => {
        console.log('test3');
    }
    test4Fn = () => {
        console.log('test4');
    }
    render() {
        return (
            <div>
                {/* 直接寫箭頭函數(shù),因為普通函數(shù)有this指向問題 */}
                <button onClick={() => { console.log('test1'); }}>第一種</button>
                {/* this.test2Fn()會被直接調(diào)用 和 this.test2Fn不一樣*/}
                <button onClick={this.test2Fn}>第二種</button>
                <button onClick={this.test3Fn}>第三種</button>
                <button onClick={() => {
                    this.test4Fn()
                }}>第四種</button>

            </div>
        )
    }
}

react——事件綁定

個人比較喜歡第三種寫法

第一種寫法有弊端,邏輯長的時候不方便觀看,也不建寫在dom里面

第二種有this指向問題,如定義一個a=100,在方法二中通過this.a獲取會報錯,這是因為this沒有指向App1實例中

react——事件綁定

?通過this.test2Fn.bind(this)可以解決,這樣可以使兩個this指向一致

import React, { Component } from 'react'

export default class App1 extends Component {
    a=100  //添加一個全局變量
    test2Fn() {
        console.log('test2',this.a);
    }
    test3Fn = () => {
        console.log('test3',this.a);
    }
    test4Fn = () => {
        console.log('test4',this.a);
    }
    render() {
        return (
            <div>
                {/* 直接寫箭頭函數(shù),因為普通函數(shù)有this指向問題 */}
                <button onClick={() => { console.log('test1',this.a); }}>第一種</button>
                {/* this.test2Fn()會被直接調(diào)用 和 this.test2Fn不一樣*/}
                <button onClick={this.test2Fn.bind(this)}>第二種</button>
                <button onClick={this.test3Fn}>第三種</button>
                <button onClick={() => {
                    this.test4Fn()
                }}>第四種</button>

            </div>
        )
    }
}

this指向修改

call:? ? 修改this指向,并使函數(shù)自動執(zhí)行(不用函數(shù)()調(diào)用)

apply: 修改this指向,并使函數(shù)自動執(zhí)行(不用函數(shù)()調(diào)用)

bind:? ?修改this指向,需要手動執(zhí)行(用()調(diào)用)

(二)函數(shù)式組件的事件綁定

function App2(){
    const test=()=>{
        console.log("add");
    }
    return(
        <div >
            <button onClick={test}>add</button>
        </div>
    )
}
export default App2

react——事件綁定文章來源地址http://www.zghlxwxcb.cn/news/detail-426196.html

到了這里,關于react——事件綁定的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • react class組件寫法

    當使用 React 的 Class 組件時,可以按照以下方式編寫: import React, { Component } from \\\'react\\\'; class MyClassComponent extends Component { ? constructor(props) { ??? super(props); ??? // 在構造函數(shù)中初始化狀態(tài)(state)或綁定方法 ??? this.state = { ????? // 初始化狀態(tài) ????? counter: 0 ??? }; ???

    2024年02月11日
    瀏覽(13)
  • react 事件函數(shù)中 this 綁定問題

    在使用類方式創(chuàng)建組件時,類中定義一個函數(shù),并且綁定到元素的點擊事件上,此時這個函數(shù)中this指向并不是當前這個組件。 組件代碼如下: 如上代碼中,點擊修改文本按鈕,會發(fā)生如下報錯 Uncaught TypeError: Cannot read properties of undefined (reading \\\'setState\\\') 提示 undefined 找不到

    2024年02月03日
    瀏覽(25)
  • 【vue3 之 emits & $emit() 講解 】監(jiān)聽子組件事件、emit事件驗證、options寫法、composition setup寫法

    前言:不懂在父組件里對子組件 @xxxx 聲明自定義事件,就不用看本篇文章了。本篇對此內(nèi)容不做任何說明。這是與 emits 結合使用的必備知識! 場景說明: 組件功能封裝: ????????組件封裝了一系列 emit?事件,并返回數(shù)據(jù)、回調(diào)函數(shù)等,或單純執(zhí)行某個操作后,觸發(fā)父組

    2023年04月09日
    瀏覽(21)
  • Vue2:給組件綁定自定義事件

    我們在頁面開發(fā)中,難免要使用事件。 在之前的學習中,我們學過 @click、@keyup、@change 等事件,這些是 Vue 自帶的事件。 它一般是用在原生的HTML元素上的。在組件上使用需要加 native 修飾 比如: 這一篇說的自定義事件,可以綁定到我們自己的 Vue 組件上。 實現(xiàn) 子組件給父組

    2024年01月19日
    瀏覽(31)
  • react和vue2/3父子組件的雙向綁定

    react和vue2/3父子組件的雙向綁定

    目錄 Vue3 父子傳值:props(attrs)/emit 父傳子 props 父child :屬性名=\\\"變量\\\" 子props=defineProps({屬性名:type...}) attrs父作用域(除 class、 style 、?props?)屬性集合 父child :屬性名=\\\"變量\\\",屬性名=\\\"常量\\\" 子?attrs = useAttrs() 子傳父emits+@=v-on: 父child @事件名\\\"=\\\"parentClick\\\",parentClick(msg) 子emi

    2024年02月16日
    瀏覽(29)
  • Vue.js核心概念簡介:組件、數(shù)據(jù)綁定、指令和事件處理

    Vue.js核心概念簡介:組件、數(shù)據(jù)綁定、指令和事件處理

    本文介紹了Vue.js的四個核心概念:組件、數(shù)據(jù)綁定、指令和事件處理。每個概念都通過一個簡單的示例進行了詳細的解釋。通過學習這些概念,您將能夠充分利用Vue.js的強大功能,構建高效、靈活的Web應用程序。 1 組件 組件是Vue.js的核心概念之一,它允許您將UI分解為相互作

    2024年02月04日
    瀏覽(28)
  • uniapp框架組件、props對組件傳值、對組件綁定事件的使用、子組件給父組件傳值

    uniapp框架組件、props對組件傳值、對組件綁定事件的使用、子組件給父組件傳值

    新建組件的方式,在components目錄下新建組件,然后就能在pages頁面當中直接使用該組件 test.vue home.vue: 頁面效果如下: props的作用就是可以從外部的標簽當中傳值到標簽當中的內(nèi)容 props的使用方法:在子組件當中,props是一個對象,對象當中的數(shù)據(jù)也是一個對象,該有兩個屬性

    2024年02月15日
    瀏覽(23)
  • 在uniapp中為自定義組件綁定點擊事件點擊后沒有效果

    在uniapp中為自定義組件綁定點擊事件點擊后沒有效果

    使用uniapp時,封裝了一個Card的組件,為這個Card組件加上點擊事件 @click=\\\"handleClick\\\"事件時,事件沒有觸發(fā)。 點開微信小程序生成后的源碼,可以看到 @click的事件 變成bindClick 了。正確的點擊事件應該是 bindtap ,如下圖中view上面綁定事件。 這個時候可以修改組件上面的寫法,

    2024年02月07日
    瀏覽(14)
  • React從入門到實戰(zhàn)-事件處理,受控組件與非受控組件

    事件處理 通過onXxx屬性指定事件處理函數(shù)(注意大小寫) React使用的是自定義(合成)事件,而不是使用的原生DOM事件——為了更好的兼容性 React中的事件是通過事件委托方式處理的(委托給組件最外層的元素——為了更高效 通過event.target得到發(fā)生事件的DOM元素對象 收集表

    2024年02月12日
    瀏覽(54)
  • 快速上手React:從概述到組件與事件處理

    快速上手React:從概述到組件與事件處理

    「作者主頁」 :雪碧有白泡泡 「個人網(wǎng)站」 :雪碧的個人網(wǎng)站 「推薦專欄」 : ★ java一站式服務 ★ ★ React從入門到精通 ★ ★ 前端炫酷代碼分享 ★ ★ 從0到英雄,vue成神之路★ ★ uniapp-從構建到提升 ★ ★ 從0到英雄,vue成神之路 ★ ★ 解決算法,一個專欄就夠了 ★ ★

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包