美文网首页
React 合成事件与原生事件

React 合成事件与原生事件

作者: xiudaozhe | 来源:发表于2020-07-14 08:58 被阅读0次

专心搞前端的第14天
在看《深入react技术栈》的时候试了下2.1章的在react中使用原生事件。发现一些写法不好使了,所以查了下文档,顺便粗略看了下事件。在此做下记录。

import React, { Component } from 'react'; 
class NativeEventDemo extends Component {   
  componentDidMount() {          
    this.refs.button.addEventListener('click', e => {   this.handleClick(e);    });   
  }  
  handleClick(e) {    
    console.log(e);   
  }   
  componentWillUnmount() {    
    this.refs.button.removeEventListener('click');   
  }  
  render() {    
    return <button ref="button">Test</button>;   
  } 
}

原书在ref的用法已不再支持,使用React.createRef()后写了示例如下:

import React,{Component} from "react";

class App extends React.Component {
    constructor() {
        super();
        this.outbtnref = React.createRef()
        this.inbtnref = React.createRef()
        this.inClick = this.inClick.bind(this)
        this.outClick = this.outClick.bind(this)
    }

    componentDidMount() {
        this.outbtnref.current.addEventListener('click',(e)=>{
            console.log('out-dom',e)
            // e.stopPropagation()
        })
        this.inbtnref.current.addEventListener('click',(e)=>{
            console.log('in-dom',e)
            e.stopPropagation()
        })
    }
    inClick(e){
        console.log('in-react',e)    //e.nativeEvent获取原生事件
        // e.stopPropagation()
    }

    outClick(e){
        console.log('out-react',e)
    }


    render() {
        return (
            <div ref={this.outbtnref} onClick={this.outClick}>
                <button ref={this.inbtnref} onClick={this.inClick}>按钮</button>
            </div>
        )
    }
}

export default App

在jsx中书写的事件是合成事件,如果要获取原生事件需使用e.nativeEvent。react并没有将真实事件绑定在元素上,而是将真实事件委托至了document中。


图片.png
图片.png

所以如果在原生事件中使用stopPropagation阻止冒泡的话,合成事件不再触发。如果在合成事件中使用stopPropagation。其实使用的并不是原生的stopPropagation。无法阻止原生事件触发。

相关文章

  • react事件机制

    (1)react合成事件 react合成事件执行过程: 合成事件与原生事件的区别 1. 写法不同,合适事件是驼峰写...

  • React-阻止事件冒泡

    react中分为合成事件、原生事件 合成事件:在jsx中直接绑定的事件,如 原生事件:通过js原生代码绑定的事件,...

  • React -------合成事件和DOM原生事件混用须知

    React合成事件和DOM原生事件混用须知

  • react-原生事件和合成事件的区别

    react-原生事件和合成事件的区别及源码分析 概念 关于 react 合成事件 目的: 封装事件,实现跨平台,把...

  • React冒泡处理(3):总结篇

    前言 在上周处理了safari浏览器的冒泡问题后又遇到了新的问题 合成事件与原生事件 在react中,事件分为合成...

  • --

    react事件机制 react基于浏览器原生事件机制,封装了一套自己的事件机制,包括事件注册、事件合成、冒泡和捕获...

  • react事件

    在react中,存在两种事件,一种是合成事件,一种是原生事件。原生事件很好理解,基于dom的操作是原生事件,那什么...

  • react的setState是同步还是异步

    直接上结论: 在react的合成事件中是异步在原生事件、setTimeout中是同步。 首先,在react中,平常...

  • React 合成事件与原生事件

    专心搞前端的第14天在看《深入react技术栈》的时候试了下2.1章的在react中使用原生事件。发现一些写法不好...

  • 2018-10-23react事件系统

    1.合成事件的绑定方式 react事件的绑定方式在写法上与原生的html事件监听器属性很相似,并且含义和触发场景也...

网友评论

      本文标题:React 合成事件与原生事件

      本文链接:https://www.haomeiwen.com/subject/mokzcktx.html