美文网首页
初识React-Handler Events

初识React-Handler Events

作者: AngleYan | 来源:发表于2017-11-17 14:39 被阅读0次

react Elements事件的处理和dom的有相似之处;
1.命名规则:驼峰命名
2.方法是通过jsx而不是字符串
eg:<button onClick={activateLasers}>按钮</button>
eg:

class Toggle extends React.Component {
        constructor(props){
            super(props);
            this.state = {isToggle : true};
            //需要改变this的指向,如果忘记的话,当你触发事件的时候,this是undefined,导致setState为null
            this.handleClick = this.handleClick.bind(this);
        }

        handleClick (){
            this.setState(prevState => ({
                isToggle:!prevState.isToggle
            }))
        }

        render(){
            //如果引用的是一个没有()的方法,那就需要bind这个方法
            return <button onClick={this.handleClick}>{this.state.isToggle ? 'ON' : 'OFF'}</button>
        }
    }

    ReactDOM.render(<Toggle/>,document.getElementById('clock'))

如果不喜欢用bind,那这里还有两种方式你可以得到this。

class LoggerBtn extends React.Component {
        handleClick = () => {
            console.log('this is:', this);
        }//这个语法默认在Create React App(facebook的脚手架)可用的
        render = () => <button onClick={this.handleClick}>点我看控制台</button>;
    }

    ReactDOM.render(<LoggerBtn/>,document.getElementById('logBtn'));
//不用上面的那个语法,可以用箭头函数
class LoggerBtn extends React.Component {
       handleClick (e){
           e.preventDefault();
           console.log('this is:', this);
       }
    render() { return <button onClick={(e) => this.handleClick(e)}>点我看控制台</button>};
   }
    ReactDOM.render(<LoggerBtn/>,document.getElementById('logBtn'));

//第二个方式

class LoggerBtn extends React.Component {
       handleClick (){
           console.log('this is:', this);
       }
       render() { return <button onClick={this.handleClick.bind(this)}>点我看控制台</button>};
   }

对比三种方式:
bind()
Function.prototype.bind(thisArg [, arg1 [, arg2, …]]) 是ES5新增的函数扩展方法,bind()返回一个新的函数对象,该函数的this被绑定到thisArg上,并向事件处理器中传入参数;
构造函数内绑定,只需绑定一次,避免每次渲染的时候重新绑定,函数在别处复用也无需绑定;
箭头函数
会捕获上下文this的值,但是箭头函数是匿名的,如果涉及到移除监听事件,我们可以使用,吧箭头函数赋值给一个变量

相关文章

网友评论

      本文标题:初识React-Handler Events

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