初識React-Handler Events

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的值,但是箭頭函數是匿名的,如果涉及到移除監聽事件,我們可以使用,吧箭頭函數賦值給一個變量

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. this之謎 在JavaScript中,this是當前執行函數的上下文。因為JavaScript有4種不同的...
    百里少龍閱讀 1,023評論 0 3
  • Javascript this 在JavaScript中, this 是當前執行函數的上下文。 JavaScri...
    Cause_XL閱讀 404評論 0 1
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內容,還有我對于 Vue 1.0 印象不深的內容。關于...
    云之外閱讀 5,079評論 0 29
  • 1.函數調用棧和調用位置 在函數執行的時候,會有一個活動記錄(也叫執行上下文)來記錄函數的調用順序,這個就是函數調...
    lightNate閱讀 539評論 1 14
  • ES5中bind函數的特性: 權威參考MDN 語法:fun.bind(thisArg[,arg1[,arg2[,...
    gofanelena閱讀 1,920評論 0 3