日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

React 合成事件和 JavaScript 事件有什么區(qū)別?

來源: 責(zé)編: 時(shí)間:2024-05-07 09:11:00 228觀看
導(dǎo)讀五一前幫一個(gè)同學(xué)做模擬面試的時(shí)候,聊到了 React 的合成事件和 JavaScript 原生事件的差異性問題。我發(fā)現(xiàn)很多 React 技術(shù)棧的同學(xué)對這一方面好像理解的并不清楚,所以今天咱們這篇文章主要就來說下這個(gè)問題。1.設(shè)計(jì)理念

五一前幫一個(gè)同學(xué)做模擬面試的時(shí)候,聊到了 React 的合成事件和 JavaScript 原生事件的差異性問題。我發(fā)現(xiàn)很多 React 技術(shù)棧的同學(xué)對這一方面好像理解的并不清楚,所以今天咱們這篇文章主要就來說下這個(gè)問題。War28資訊網(wǎng)——每日最新資訊28at.com

War28資訊網(wǎng)——每日最新資訊28at.com

1.設(shè)計(jì)理念

React合成事件 封裝 了原生瀏覽器事件,提供了統(tǒng)一的API接口,使得開發(fā)者無論瀏覽器環(huán)境如何都可以用相同的方式處理事件。這種方法的主要目的是:確保跨瀏覽器的一致性并與 React 的聲明式編程模型和生命周期集成。War28資訊網(wǎng)——每日最新資訊28at.com

JavaScript 中的事件處理程序 由瀏覽器直接提供,與特定的瀏覽器行為密切相關(guān)。不同的瀏覽器可能有不同的實(shí)現(xiàn)和支持級別。War28資訊網(wǎng)——每日最新資訊28at.com

2.瀏覽器兼容性

React 合成事件處理所有瀏覽器兼容性問題,為開發(fā)人員提供一個(gè)干凈、一致的事件處理接口。War28資訊網(wǎng)——每日最新資訊28at.com

例如:它標(biāo)準(zhǔn)化了不同瀏覽器之間的事件行為,以事件冒泡和默認(rèn)行為為例,咱們來看下它的實(shí)現(xiàn):War28資訊網(wǎng)——每日最新資訊28at.com

// 構(gòu)造器定義,接收事件配置、目標(biāo)實(shí)例、本地事件和事件目標(biāo)作為參數(shù)function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {  this.dispatchConfig = dispatchConfig; // 存儲事件的配置信息,例如事件類型  this._targetInst = targetInst; //存儲觸發(fā)事件的組件實(shí)例  this.nativeEvent = nativeEvent; // 存儲本機(jī)瀏覽器事件對象  this.target = nativeEventTarget; // 存儲事件的原生目標(biāo),即事件最初發(fā)生的多姆元素  this.currentTarget = null; // 處理事件的當(dāng)前多姆元素將在事件處理期間設(shè)置}// SyneticEvents的原型對象,定義所有實(shí)例共享的方法SyntheticEvent.prototype = {  // Method to prevent the default event behavior  preventDefault: function() {    this.defaultPrevented = true; // 標(biāo)志著事件的默認(rèn)行為已被阻止    const event = this.nativeEvent; // 獲取本地事件對象    if (!event) {      return; // 如果沒有本地事件對象,則直接返回    }    // 如果本機(jī)事件對象支持preventAlert方法,請調(diào)用它以防止默認(rèn)行為    if (event.preventDefault) {      event.preventDefault();    } else if (typeof event.returnValue !== 'undefined') { // 與IE8及以下版本兼容      event.returnValue = false; // 在較舊的IE瀏覽器中,使用returnValue= true來防止默認(rèn)行為    }  },    // 阻止事件進(jìn)一步傳播的方法  stopPropagation: function() {    const event = this.nativeEvent; // 獲取本地事件對象    if (!event) {      return; // 如果沒有本地事件對象,則直接返回    }    // 如果本機(jī)事件對象支持stopPropagation方法,請調(diào)用它來停止事件冒泡    if (event.stopPropagation) {      event.stopPropagation();    } else if (typeof event.cancelBubble !== 'undefined') { // 與IE8及以下版本兼容      event.cancelBubble = true; // 在較舊的IE瀏覽器中,使用cancelBubble=true來停止事件冒泡    }  },  // ...};

3.性能優(yōu)化

React 合成事件使用 事件池 來提高性能,即:重(chong)用事件對象。War28資訊網(wǎng)——每日最新資訊28at.com

這意味著:事件回調(diào)函數(shù)執(zhí)行后,事件對象的所有屬性都會被清除并回收以供重用,減少垃圾收集和內(nèi)存使用的壓力。War28資訊網(wǎng)——每日最新資訊28at.com

// 事件對象重用和回收的核心邏輯SyntheticEvent.prototype.destructor = function() {  this.target = null;  this.currentTarget = null;  this.dispatchConfig = null;  this._targetInst = null;  this.nativeEvent = null;  this.isDefaultPrevented = false;  this.isPropagationStopped = false;  // 清除所有屬性....};// Event poolvar eventPool = [];// 從池中檢索事件對象的函數(shù)SyntheticEvent.getPooled = function(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {  if (eventPool.length) {    var instance = eventPool.pop();    SyntheticEvent.call(instance, dispatchConfig, targetInst, nativeEvent, nativeEventTarget);    return instance;  }  return new SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);};// 將事件對象返回到池的函數(shù)SyntheticEvent.release = function(event) {  event.destructor();  eventPool.push(event);};

而 JavaScript 事件每次觸發(fā)時(shí)都會創(chuàng)建一個(gè)新的事件對象,這可能會增加內(nèi)存使用量和垃圾收集的頻率,特別是當(dāng)事件頻繁觸發(fā)時(shí)(例如:滾動(dòng) 或 輸入)。”War28資訊網(wǎng)——每日最新資訊28at.com

4.使用模式

React 通過 JSX語法 允許我們直接在組件的元素上聲明事件處理函數(shù)(合成事件)。War28資訊網(wǎng)——每日最新資訊28at.com

React 會自動(dòng)處理添加和刪除事件監(jiān)聽器,確保組件安裝時(shí)添加監(jiān)聽器,卸載時(shí)刪除監(jiān)聽器,從而避免內(nèi)存泄漏。War28資訊網(wǎng)——每日最新資訊28at.com

export default function Button() {  function handleClick() {    console.log('click!');  }  return <button onClick={handleClick}>點(diǎn)我</button>;}

Javascript 事件需要手動(dòng)調(diào)用 addEventListener 添加事件監(jiān)聽器,同樣手動(dòng)調(diào)用removeEventListener 刪除事件監(jiān)聽器:War28資訊網(wǎng)——每日最新資訊28at.com

document.addEventListener('DOMContentLoaded', function() {  const button = document.querySelector('button');  button.addEventListener('click', function() {    console.log('click');  });});

5.總結(jié)

所以,React 的合成事件是 React 提供了一種高度抽象和集成的事件處理方式,并且可以更好地處理瀏覽器兼容性以及優(yōu)化(卸載事件)等問題。它最終依然會被解析成原生事件。War28資訊網(wǎng)——每日最新資訊28at.com

而 JavaScript 原生事件就是瀏覽器所提供的標(biāo)準(zhǔn) API,使用時(shí)需要更多的處理兼容性以及性能等邊緣邏輯。War28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-86998-0.htmlReact 合成事件和 JavaScript 事件有什么區(qū)別?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 如何用C++實(shí)現(xiàn)簡單的內(nèi)存池

下一篇: Python 編程速查:迅速理解 next() 函數(shù)

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产乱码精品1区2区3区| 欧美国产一区二区三区激情无套| 亚洲三级电影在线观看| 亚洲日本欧美| 亚洲一区二区三区在线观看视频| 欧美一级理论片| 久久久久国产精品厨房| 欧美激情亚洲视频| 国产乱码精品一区二区三区忘忧草 | 亚洲欧美国产精品桃花| 久久电影一区| 欧美精品免费看| 国产精品入口日韩视频大尺度| 国内久久婷婷综合| 亚洲精品综合| 欧美一区=区| 毛片一区二区| 国产精品久久毛片a| 黄色欧美日韩| 亚洲深夜福利网站| 久久久亚洲一区| 欧美午夜精品久久久久免费视| 国语自产精品视频在线看8查询8| 日韩一区二区免费高清| 久久国产毛片| 欧美日韩在线一区| 一区二区亚洲精品| 亚洲性xxxx| 免费影视亚洲| 国产日韩欧美高清免费| 日韩亚洲欧美一区二区三区| 久久不射中文字幕| 欧美色中文字幕| 悠悠资源网亚洲青| 亚洲欧美韩国| 欧美日本中文字幕| 黑丝一区二区| 亚洲性av在线| 欧美精品情趣视频| 精东粉嫩av免费一区二区三区| 亚洲午夜精品在线| 欧美国产综合视频| 禁断一区二区三区在线| 亚洲综合色激情五月| 欧美精品日韩精品| 亚洲第一黄色网| 欧美在线二区| 国产精品久久久久高潮| 亚洲三级网站| 蜜桃av一区二区在线观看| 国产深夜精品| 一区二区三区www| 欧美成人精品在线| 精品成人国产在线观看男人呻吟| 亚洲欧美99| 欧美视频免费| 亚洲伦理网站| 欧美www在线| 在线播放中文一区| 久久久xxx| 国产欧美日韩高清| 亚洲综合首页| 欧美性淫爽ww久久久久无| 亚洲免费电影在线观看| 免费在线播放第一区高清av| 国模精品一区二区三区色天香 | 欧美高清视频一二三区| 在线观看视频欧美| 久久久一区二区三区| 国产亚洲精品一区二555| 亚洲欧美国产毛片在线| 国产精品豆花视频| 亚洲少妇中出一区| 欧美日韩伦理在线免费| 亚洲精品视频在线播放| 欧美福利视频在线| 亚洲欧洲精品一区二区三区| 女人香蕉久久**毛片精品| 在线观看日韩欧美| 另类图片国产| 亚洲高清资源| 欧美www在线| 亚洲人在线视频| 欧美激情亚洲精品| 夜夜嗨av一区二区三区网页| 欧美日韩另类丝袜其他| 一区二区三区 在线观看视| 欧美日韩网址| 亚洲自拍另类| 国产欧美精品国产国产专区| 性欧美大战久久久久久久久| 国产日韩欧美在线看| 欧美一区二区在线看| 国产一区二区三区不卡在线观看| 久久精品视频免费播放| 一区二区亚洲欧洲国产日韩| 免费91麻豆精品国产自产在线观看| 亚洲国产福利在线| 欧美日韩成人激情| 亚洲一区二区在线视频| 国产伦精品免费视频| 久久爱www久久做| 一色屋精品视频免费看| 男女激情久久| 一本色道久久综合亚洲精品小说| 国产精品v欧美精品∨日韩| 午夜激情一区| 国语自产精品视频在线看抢先版结局| 久久久噜噜噜久噜久久| 亚洲丶国产丶欧美一区二区三区 | 国产在线高清精品| 久久综合九九| 99国产精品视频免费观看| 国产精品ⅴa在线观看h| 久久av一区二区| 91久久综合| 国产精品久久久久久久久久免费| 欧美怡红院视频一区二区三区| 精品电影在线观看| 欧美日韩国产999| 香蕉尹人综合在线观看| 亚洲国产美国国产综合一区二区| 欧美日韩视频一区二区| 欧美在线一级va免费观看| 亚洲高清在线观看一区| 欧美日韩一级大片网址| 欧美一区午夜精品| 亚洲精品美女免费| 国产女优一区| 欧美激情精品久久久久久变态| 亚洲免费在线电影| 亚洲高清成人| 国产精品亚洲欧美| 欧美96在线丨欧| 亚洲欧美一级二级三级| 亚洲国产欧美日韩另类综合| 国产精品免费一区二区三区在线观看 | 美女久久一区| 亚洲午夜一区| 亚洲国产精品女人久久久| 国产精品狼人久久影院观看方式| 久久久久久久91| 中文av一区特黄| 在线观看国产精品淫| 国产精品成人免费视频| 免费成人网www| 午夜国产一区| 亚洲美女一区| 黄色av成人| 国产精品乱码人人做人人爱| 米奇777超碰欧美日韩亚洲| 亚洲欧美国产高清| 日韩小视频在线观看专区| 国产一区二区三区黄视频| 欧美日韩一区三区四区| 久色婷婷小香蕉久久| 亚洲欧美久久| 艳妇臀荡乳欲伦亚洲一区| 一区二区在线不卡| 国产精品永久| 欧美体内she精视频在线观看| 另类激情亚洲| 欧美一区亚洲二区| 国产精品99久久久久久久久久久久| 亚洲二区免费| 国产一区av在线| 国产精品久久激情| 欧美日韩福利在线观看| 另类人畜视频在线| 久久久久久久久综合| 亚洲欧美一区二区视频| 9l国产精品久久久久麻豆| 在线日韩视频| 韩日欧美一区二区三区| 国产伦精品一区二区三区视频黑人| 欧美日本一区二区高清播放视频| 狂野欧美激情性xxxx| 久久成年人视频| 午夜一级久久| 亚洲欧美第一页| 亚洲午夜视频在线观看| 99热精品在线| 亚洲美女精品久久| 亚洲精品视频在线看| 亚洲国产精品久久久久秋霞不卡 | 一二三四社区欧美黄| 亚洲日韩中文字幕在线播放| 在线欧美小视频| 精品av久久久久电影| 国产主播一区二区三区| 国产女主播在线一区二区| 国产精品三级久久久久久电影| 欧美性开放视频| 欧美婷婷久久| 欧美亚州在线观看| 欧美午夜精品久久久| 欧美午夜欧美| 国产精品成人va在线观看| 欧美日韩免费一区二区三区| 欧美日本在线| 欧美日韩另类丝袜其他| 欧美色欧美亚洲高清在线视频| 欧美日韩一区自拍| 欧美午夜精品久久久久免费视|