首页 > 其他分享 >React学习笔记09- 事件处理

React学习笔记09- 事件处理

时间:2023-10-20 10:37:24浏览次数:32  
标签:事件处理 console 函数 指向 09 Component React 写法 log

React采用on+事件名的方式来绑定一个事件,注意,这里和原生的事件是有区别的,原生的事件全是小写 onclick , React里的事件是驼峰 onClick ,React的事件并不是原生事件,而是合成事件。   事件回调的几种写法

1.直接在组件内定义一个非箭头函数的方法,然后在render里直接使用 onClick=

{this.handleClick.bind(this)} (不推荐)

这种写法需要用bind处理回调函数不然获取不到this
import React, { Component } from 'react'

export default class App extends Component {
  render() {
    return (
      <div>
        {/* 
            和vue不同react绑定事件回调不需要加(),this.handler即可

        */}
        <button onClick={this.handler1.bind(this)}>写法一</button>
      </div>
    )
  }
  handler1(e){
    console.log('我是写法一',e,'this:',this);
  }
  /* 
   call,改变this指向并自动执行函数
   apply,改变this指向并自动执行函数
   bind,改变this指向 
  */
}

2.在组件内使用箭头函数定义一个方法(推荐)

这种写法不需要用bind处理回调函数,因为箭头函数的this指向函数定义的外部作用域即class组件本身

 

import React, { Component } from 'react'

export default class App extends Component {
  render() {
    return (
      <div>
        {/* 
            和vue不同react绑定事件回调不需要加(),this.handler即可

        */}
        <button onClick={this.handler1.bind(this)}>写法一</button>
        <button onClick={this.handler2}>写法二</button>
 
      </div>
    )
  }
  handler1(e){
    console.log('我是写法一',e,'this:',this);
  }
  handler2=(e)=>{
    console.log('我是写法二',e,'this:',this);
  }

  /* 
   call,改变this指向并自动执行函数
   apply,改变this指向并自动执行函数
   bind,改变this指向 
  */
}

 

3.直接在render里写行内的箭头函数(不推荐)

这种写法也可获得this,因为函数的this是指向其调用者。而箭头函数的this指向其定义的外部作用域即render,render的this指向class,最终获得this就是class

import React, { Component } from 'react'

export default class App extends Component {
  render() {
    return (
      <div>
        {/* 
            和vue不同react绑定事件回调不需要加(),this.handler即可

        */}
        <button onClick={this.handler1.bind(this)}>写法一</button>
        <button onClick={this.handler2}>写法二</button>
        <button onClick={
            (e)=>{
                this.handler3(e)
            }
        }>写法三</button>
      </div>
    )
  }
  handler1(e){
    console.log('我是写法一',e,'this:',this);
  }
  handler2=(e)=>{
    console.log('我是写法二',e,'this:',this);
  }
  handler3(e){
    console.log('我是写法三',e,'this:',this);
  }
  /* 
   call,改变this指向并自动执行函数
   apply,改变this指向并自动执行函数
   bind,改变this指向 
  */
}

4.直接在组件内定义一个非箭头函数的方法,然后在constructor里bind(this)(推荐)

class组件里的构造函数一定要使用super来继承Component

import React, { Component } from 'react'

export default class App extends Component {
    constructor(){
        super()
        this.handler4 = this.handler4.bind(this)
      }
  render() {
    return (
      <div>
        {/* 
            和vue不同react绑定事件回调不需要加(),this.handler即可

        */}
        <button onClick={this.handler1.bind(this)}>写法一</button>
        <button onClick={this.handler2}>写法二</button>
        <button onClick={
            (e)=>{
                this.handler3(e)
            }
        }>写法三</button>
        <button onClick={this.handler4}>写法四</button>

      </div>
    )
  }
 
  handler1(e){
    console.log('我是写法一',e,'this:',this);
  }
  handler2=(e)=>{
    console.log('我是写法二',e,'this:',this);
  }
  handler3(e){
    console.log('我是写法三',e,'this:',this);
  }
  handler4(e){
    console.log('我是写法四',e,'this:',this);
  }
  /* 
   call,改变this指向并自动执行函数
   apply,改变this指向并自动执行函数
   bind,改变this指向 
  */
}

这里我一般使用方法二和三

标签:事件处理,console,函数,指向,09,Component,React,写法,log
From: https://www.cnblogs.com/SadicZhou/p/17776438.html

相关文章

  • 2023-09-30:用go语言,给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1, 每一
    2023-09-30:用go语言,给你一个整数数组nums和一个整数k。nums仅包含0和1,每一次移动,你可以选择相邻两个数字并将它们交换。请你返回使nums中包含k个连续1的最少交换次数。输入:nums=[1,0,0,1,0,1],k=2。输出:1。答案2023-09-30:步骤描述:1.定义一个函数minMoves......
  • react native 退出登录后清空路由栈并返回登录页
    背景:由于项目使用的expo-router,一开始时在退出登录是如下实现的:import{router}from"expo-router";...router.replace("/my/login/login");...使用expo-router的router.replace方法跳转至登录页。结果发现虽然跳转成功,但是点击手机返回操作时,虽然上一个页面没有了......
  • react项目中预览pdf文件
    最近需求,要在b端展示上传的pdf文件。实现方式有很多,记录一下我们最常用的pdf.js//安装"pdfjs-dist":"2.0.402"//引入import*aspdfjsfrom'pdfjs-dist'import*aspdfjsWorkerfrom'pdfjs-dist/build/pdf.worker.entry'//定义初始值letpdfDoc=null;......
  • Ant Design中表单验证输入框默认值initialValue不更改值会验证不通过(react)
    AntDesign中表单验证输入框默认值initialValue不更改值会验证不通过(react)更改前<Form.Itemlabel="用户标识"name="id"rules={[{required:true,message:'用户标识不能为空!',},]}......
  • React学习笔记08- 组件的样式
    1.使用行内样式想给虚拟dom添加行内样式,需要使用表达式传入样式对象的方式来实现://注意这里的两个括号,第一个表示我们在要JSX里插入JS了,第二个是对象的括号<pstyle={{color:'red',fontSize:'14px'}}>Helloworld</p>行内样式需要写入一个样式对象,而这个样式对象的位置可......
  • React学习笔记06-函数式组件
    函数式组件即在React中通过函数的方式来声明一个组件importReactfrom"react"functionApp(){return(<div>函数式组件<div>hhh</div></div>)}/*16.8之前//无状态16.8之后reacthooks*/exportdef......
  • React学习笔记07-组件嵌套
    一个项目肯定是由多个组件构成的,组件之前必然会存在相互嵌套的关系在react中如果想要将一个组件嵌入到另外一个组件中只需要在父组件的render函数的返回值中放入子组件即可请看下面代码importReact,{Component}from"react"classNavbarextendsComponent{rende......
  • React学习笔记05-类组件
    ES6的加入让JavaScript直接支持使用class来定义一个类,react创建组件的方式就是使用的类的继承,ES6class是目前官方推荐的使用方式,它使用了ES6标准语法来构建,看以下代码importReactfrom'react'importReactDOMfrom'react-dom'classAppextendsReact.Component{rend......
  • 【Vue3响应式入门#01】Reactivity
    专栏分享:vue2源码专栏,vue3源码专栏,vuerouter源码专栏,玩具项目专栏,硬核......
  • react + electron 打包记录
    package.json中的更改:增加: "homepage":"./",  "build":{  "productName":"xxxx",  "appId":"com.xxx.win",  "directories":{   "output":"dist&quo......