摘要:按鈕中使用原生事件中提供了很好的合成事件系統(tǒng),但有時(shí)候也需要用到原生事件。而使用合成事件系統(tǒng)時(shí)則不需要,因?yàn)閮?nèi)部以及處理了。事件類型鍵盤事件焦點(diǎn)事件表單事件鼠標(biāo)事件選擇事件觸摸事件事件動(dòng)畫事件圖像事件媒體事件剪貼板事件上一篇開發(fā)教程六與
事件系統(tǒng)
Virtual DOM在內(nèi)存中是以對象的形式存在的,如果想要在這些對象上添加事件的話,React是基于Virtual DOM實(shí)現(xiàn)了一個(gè)合成事件層,他完全符合w3c標(biāo)準(zhǔn),不存在ie的兼容問題。并且擁有和瀏覽器原生事件一樣的接口,支持冒泡,可以使用stopPropagation()和preventDefault()來中斷它。好吧不要想太多記住就是和瀏覽器事件一樣,處了調(diào)用形式
合成事件的綁定方式簡單的很
//jsx: //瀏覽器原生:
react只是借鑒DOM0級事件的這種寫法
綁定方法在react組件中,每個(gè)方法的上下文都會(huì)指向該組件的實(shí)例,即自動(dòng)綁定this為當(dāng)前組件。而且React還會(huì)對這種引用進(jìn)行緩存,以達(dá)到CPU和內(nèi)存的最優(yōu)化。在使用ES6 class或者純粹函數(shù)時(shí),這種綁定就不復(fù)存在了,我們需要手動(dòng)實(shí)現(xiàn)this綁定
bind方法這個(gè)方法可以幫助我們綁定事件處理器內(nèi)的this,并且可以向事件處理器中傳遞參數(shù)
import React, { Component } form "react"; class App extends Component { handleClick (e, arg) { console.log(e, arg) } render () { return ( ) } }構(gòu)造器內(nèi)聲明
在組件的構(gòu)造器內(nèi)完成了this的綁定,這種綁定方式的好處在于僅需要進(jìn)行一次綁定,而不需要每次調(diào)用事件監(jiān)聽器時(shí)去執(zhí)行綁定操作。
import React, { Component } form "react"; class App extends Component { constructor () { super(); this.handleClick = this.handleClick.bind(this,arg); } handleClick (e, arg) { console.log(e, arg) } render () { return ( ) } }箭頭函數(shù)
箭頭函數(shù)不僅是函數(shù)的語法糖,它還自動(dòng)綁定定義此函數(shù)作用域的this,因此我們不需要對它使用bind方法。
import React, { Component } form "react"; class App extends Component { constructor () { super(); this.handleClick = (e, arg) => { console.log(e, arg) } } render () { return ( ) } }React中使用原生事件
React中提供了很好的合成事件系統(tǒng),但有時(shí)候也需要用到原生事件。在React生命周期中提供了componentDidMount會(huì)在組件已經(jīng)完成安裝并且在瀏覽器中存在真實(shí)的DOM后調(diào)用,此時(shí)我們就可以完成原生事件的綁定。比如:
import React, { Component } form "react"; class App extends Component { constructor () { super(); } componentDidMount () { this.refs.button.addEventListener("click", e => { handleClick(e); }) } handleClick (e) { console.log(e) } componentWillUnmount () { this.refs.button.removeEventListener("click") } render () { return ( ) } }
一定要注意在React中使用原生DOM事件時(shí),一定要在組件卸載時(shí)手動(dòng)移除,否則很可能出現(xiàn)內(nèi)存泄漏的問題。2而使用合成事件系統(tǒng)時(shí)則不需要,因?yàn)镽eact內(nèi)部以及處理了。事件類型 鍵盤事件
onKeyDown
onKeyPress
onKeyUp
onFocus
onBlur
onChange
onInput
onSubmit
onClick
onContextMenu
onDoubleClick
onMouseDown
onMouseUp
onMouseOver
onMouseOut
onMouseMove
onMouseEnter
onMouseLeave
onDrag
onSelect
觸摸事件onTouchCancel
onTouchEnd
onTouchMove
onTouchStart
onScroll
動(dòng)畫事件onAnimationStart
onAnimationEnd
onAnimationIteration
onLoad
onError
onPause
onPlay
onCanPlay
onLoadStart
onProgress
onCopy
onCut
onPaste
上一篇:react開發(fā)教程(六)React與DOM
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/87178.html
摘要:當(dāng)組件裝載完畢時(shí),就會(huì)被調(diào)用。它可以是一個(gè)回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)會(huì)在組件被掛載后立即執(zhí)行。也可以是一個(gè)字符串吧放到原生的組件中,我們可以通過獲取到節(jié)點(diǎn)而如果吧放到組件上獲取到的就是組件的實(shí)例上一篇開發(fā)教程五生命周期下一篇開發(fā)教程七事件系統(tǒng) ReactDOM findeDOMNode 語法:DOMElement findDOMNode(ReactComponent component)...
摘要:本人計(jì)劃編寫一個(gè)針對中初級前端開發(fā)者學(xué)習(xí)的系列教程玩轉(zhuǎn)。使用的原因是新的語言規(guī)范開發(fā)效率更高代碼更優(yōu)雅,尤其是基于開發(fā)的項(xiàng)目。其次也是目前特別流行的一個(gè)前端框架,截止目前,上有將近萬,國內(nèi)一二線互聯(lián)網(wǎng)公司都有深度依賴開發(fā)的項(xiàng)目。 本人計(jì)劃編寫一個(gè)針對中初級前端開發(fā)者學(xué)習(xí) React 的系列教程 - 《玩轉(zhuǎn) React》。 文章更新頻率:每周 1 ~ 2 篇。 目錄 玩轉(zhuǎn) React(...
閱讀 2014·2021-11-15 11:38
閱讀 2048·2019-08-30 15:55
閱讀 2182·2019-08-30 15:52
閱讀 3167·2019-08-30 14:01
閱讀 2684·2019-08-30 12:47
閱讀 1128·2019-08-29 13:17
閱讀 1062·2019-08-26 13:55
閱讀 2629·2019-08-26 13:46