×

React开发:事件绑定this指向三种方法

作者:Web前端之家2021.06.16来源:Web前端之家浏览:1636评论:0
关键词:react

React开发:事件绑定this指向三种方法。

箭头函数

1)利用箭头函数自身不绑定this的特点;

2)render()方法中的this为组件实例,可以获取到setState();

class App extends React.Component{
    state ={
        count: 0
    }
    // 事件处理程序
    onIncrement() {
        console.log('事件处理函数中的this:',this)
        this.setState({
            count:this.state.count+1
        })
    }
    // 渲染
    render() {
        return (
            <div>
                <h1> {this.state.count}</h1>
              // 箭头函数中的this指向外部环境,此处为:render()方法
                <button onClick={()=>this.onIncrement()}>+1</button>
                {/* <button onClick={this.onIncrement()}>+1</button> */}
            </div>
        )
    }
}

Function.proptype.bind()

利用ES5中的bind方法,将事件处理程序中的this与组件实例绑定到一起

class App extends React.Component{
    constructor() {
        super()
        // 数据
        this.state ={
            count: 0
        }
        // 第一中方法.bind 改变this指向,返回一个函数,不执行该函数
        this.onIncrement = this.onIncrement.bind(this)
    }
     // 事件处理程序
     onIncrement() {
         console.log('事件处理函数中的this:',this)
         this.setState({
             count:this.state.count+1
         })
     }
    // 渲染
    render() {
        return (
            <div>
                <h1> {this.state.count}</h1>
                <button onClick={this.onIncrement}>+1</button>
                {/* <button onClick={this.onIncrement()}>+1</button> */}
            </div>
        )
    }
}

class的实例方法

1)利用箭头函数形式的class实例方法

2)该语法是实验性语法,但是由于babel的存在就可以直接使用

class App extends React.Component{
    constructor() {
        super()
        // 数据
        this.state ={
            count: 0
        }
    }
      // 事件处理程序 
      onIncrement=()=> {
        console.log('事件处理函数中的this:',this)
        this.setState({
            count:this.state.count+1
        })
    }
    // 渲染
    render() {
        return (
            <div>
                <h1> {this.state.count}</h1>
                <button onClick={this.onIncrement}>+1</button>
                {/* <button onClick={this.onIncrement()}>+1</button> */}
            </div>
        )
    }
}

温馨提示:本文作者系Web前端之家 ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://www.jiangweishan.com/article/react20210616a2.html

网友评论文明上网理性发言 已有0人参与

发表评论:

最新留言

  • Web前端之家

    可以的,有什么问题吗?...

  • 访客

    我就试试的...

  • a235

    不能比啊,老外赚钱就是多!...

  • Web前端之家

    备份是必须的,避免麻烦!...

  • a235

    总结得不错,正好用到,提前备份还是最靠谱啊!...

  • Web前端之家

    谢谢支持,请持续关注Web前端之家!...

  • 访客

    文章很棒,做即时通讯也可以试试【GoEasy】这个框架,官网文档详细还提供了各种demo,大大降低了...

  • Web前端之家

    是的,等其他人验证没问题再装吧,总会有第一个吃螃蟹的人,哈哈!!...

首页|JavaScript|HTML|HTML4|HTML5|CSS3|开发工具|性能优化|移动开发|前端教程|性能优化|开发工具|酷站欣赏|UI设计|前端教程

Copyright © 2021 Web前端之家(www.jiangweishan.com) 版权所有 All Rights Reserved.
粤ICP备12067512号-1

Copyright Your WebSite.Some Rights Reserved.

Powered By Z-BlogPHP 1.7.1