React的事件

React事件系統(tǒng)

事件處理程序通過 合成事件(SyntheticEvent)的實例傳遞役电,SyntheticEvent是瀏覽器原生事件跨瀏覽器的封裝。SyntheticEvent 和瀏覽器原生事件一樣有 stopPropagation()冒签、preventDefault() 接口闯两,而且這些接口跨瀏覽器兼容。

  1. 原生事件
document.querySelector('xxx').addEventListener('click', () => {
    console.log(event);
})
// 輸出1:windowEvent ====>  chorme
// 輸出2:   undefined  ====>  Firefox

可以看出event參數(shù)不加的話腥沽,有的瀏覽器會兼容逮走,像火狐就不兼容,因此需要在事件handler中寫

document.querySelector('xxx').addEventListener('click', event => {
    event = event || window.event;
    event.stopPropagation();
    event.preventDefault();
})

如果不寫event而是在函數(shù)中傳了某種參數(shù)今阳,如果是chorme還好师溅,會給你補充一個window.event,某些不支持的瀏覽器就會把你的參數(shù)當(dāng)event了盾舌,當(dāng)然會報錯了;

  1. React的事件
  • 0.12版本之前可以使用在event handler(onclick = xxx.bind(this))函數(shù)中使用return false來代替stopPropagation 和 preventDefault, 目前已經(jīng)被移除墓臭,請不要使用。
  • 使用 合成事件(SyntheticEvent)(類似jquery的$event)是對各種瀏覽器兼容的event相關(guān)封裝妖谴,目前支持以下屬性
    • boolean bubbles
    • boolean cancelable
    • DOMEventTarget currentTarget
    • boolean defaultPrevented
    • Number eventPhase
    • boolean isTrusted
    • DOMEvent nativeEvent
    • void preventDefault()
    • void stopPropagation()
    • DOMEventTarget target
    • Date timeStamp
    • String type
  • 默認(rèn)所有事件都在冒泡階段被觸發(fā)窿锉,如果想使用事件捕獲有兩種方法
    1. 使用原生addEventListener('click', handler, true)第三個參數(shù)給true
    2. 使用onClickCapture = xxx.bind(this);
  • 傳統(tǒng)開發(fā)方式在元素較多時建議使用事件委托 / 事件代理方式在父級進(jìn)行代理事件酌摇,但React獨特的事件處理系統(tǒng)會先把所有事件處理函數(shù)都收集到父級,再根據(jù)組件進(jìn)行派發(fā)嗡载,因此無需特意寫事件代理函數(shù)窑多,即使一個列表有一萬個組件元構(gòu)成,onClick函數(shù)也可以寫在組件元中洼滚。
  • 事件池
    event在React是一個虛擬對象埂息,在事件被收集后到父級元素中時,虛擬對象會被合并遥巴,在該事件處理的回調(diào)后屬性就沒用了千康,如果用setState這種異步方法調(diào)用的話就沒有用了。
function onClick(event) {
  console.log(event); // =>無效的對象
  console.log(event.type); // => "click"
  var eventType = event.type; // => "click"

  setTimeout(function() {
    console.log(event.type); // => null
    console.log(eventType); // => "click"
  }, 0);

  this.setState({clickEvent: event}); // 不起作用.this.state.clickEvent 將只包含空值.
  this.setState({eventType: event.type}); // 您依然可以導(dǎo)出事件屬性
}

如果您想以一個異步的方式來訪問事件屬性铲掐,您應(yīng)該對事件調(diào)用event.persist()吧秕。這將從事件池中取出合成的事件,并允許該事件的引用迹炼,使用戶的代碼被保留砸彬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市斯入,隨后出現(xiàn)的幾起案子砂碉,更是在濱河造成了極大的恐慌,老刑警劉巖刻两,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件增蹭,死亡現(xiàn)場離奇詭異,居然都是意外死亡磅摹,警方通過查閱死者的電腦和手機滋迈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來户誓,“玉大人饼灿,你說我怎么就攤上這事〉勖溃” “怎么了碍彭?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悼潭。 經(jīng)常有香客問我庇忌,道長,這世上最難降的妖魔是什么舰褪? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任皆疹,我火速辦了婚禮,結(jié)果婚禮上占拍,老公的妹妹穿的比我還像新娘略就。我一直安慰自己软族,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布残制。 她就那樣靜靜地躺著,像睡著了一般掖疮。 火紅的嫁衣襯著肌膚如雪初茶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天浊闪,我揣著相機與錄音恼布,去河邊找鬼。 笑死搁宾,一個胖子當(dāng)著我的面吹牛折汞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盖腿,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼爽待,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翩腐?” 一聲冷哼從身側(cè)響起鸟款,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茂卦,沒想到半個月后何什,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡等龙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年处渣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛛砰。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡罐栈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泥畅,到底是詐尸還是另有隱情悠瞬,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布涯捻,位于F島的核電站浅妆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏障癌。R本人自食惡果不足惜凌外,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涛浙。 院中可真熱鬧康辑,春花似錦摄欲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至按咒,卻和暖如春迟隅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背励七。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工智袭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掠抬。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓吼野,卻偏偏與公主長得像,于是被迫代替她去往敵國和親两波。 傳聞我的和親對象是個殘疾皇子瞳步,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 以下文章為轉(zhuǎn)載,對理解JavaScript中的事件處理機制很有幫助腰奋,淺顯易懂谚攒,特分享于此。 什么是事件氛堕? 事件(E...
    jxyjxy閱讀 3,041評論 1 10
  • <a name='html'>HTML</a> Doctype作用馏臭?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,497評論 1 19
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南讼稚,這只是我在學(xué)習(xí)過程中的一些閱讀筆記括儒,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,843評論 1 18
  • 打斷喂食的鷹 鷹當(dāng)然不開心 但鷹不計較 不代表世界太平 隱忍是個一時詞匯 忍耐也是過渡的語氣 包容是未上高樓的境界...
    翔于閱讀 206評論 0 1
  • 待我長發(fā)及腰锐想,將軍歸來可好帮寻?此身君子意逍遙,怎料山河蕭蕭赠摇。天光乍破遇固逗,暮雪白頭老。 寒劍默聽奔雷藕帜,長槍獨守空壕烫罩。醉...
    花兒笑微微閱讀 187評論 0 1