2017-10-11 79 views
0

我想執行disNone()saveInfo()單擊時按鈕: 錯誤:類型錯誤:未定義要執行disNone()函數內saveInfo()函數被點擊按鈕

import React, { Component } from 'react'; 

class Login extends Component { 
constructor(props){ 
    super(props); 

    this.state = { 
     dispNone:"dispNone", 
     message:"dispNone" 
    }; 
    this.disNone = this.disNone.bind(this); 
}; 

disNone(){ 
    this.setState({ 
     dispNone: "dispNone", 
     message:"dispBlock" 
    }); 
} 


saveInfo(){ 
    this.disNone(); 
} 

render() { 
    return (
     <div> 
     // other code 
      <button onClick={this.saveInfo}>Sign up</button> 
     </div> 
    ); 
    } 
} 

export default Login; 
無法讀取屬性「disNone」
+0

什麼是錯誤? –

+0

TypeError:無法讀取未定義的屬性'disNone' –

回答

1

在構造函數中,除了this.disNone = this.disNone.bind(this),你也需要把

this.saveInfo = this.saveInfo.bind(this); 

錯誤是因爲safeInfo不知道什麼this手段,它給你的錯誤disNone is undefined

編輯:我們在構造函數中這樣做,因爲我們只需要bind函數一次。或者,您也可以將其寫入render函數中,但這意味着每次執行函數render時,都會重新綁定該函數,這很浪費。

第三種方法是在渲染函數中使用() => this.saveInfo(),這不需要任何類型的綁定,但是每次運行render函數時都必須「創建」該函數。

+0

完美的作品,謝謝 你能解釋我爲什麼使用 this.disNone = this.disNone.bind(this); this.saveInfo = this.saveInfo.bind(this); 在構造函數中? –

+0

增加了一些更多的細節,這裏也是一個不錯的文章,總結了不同的方式:https://daveceddia.com/avoid-bind-when-passing-props/ – Bill

+0

感謝這個信息它非常有幫助。 –

0

在構造函數中添加

this.saveInfo = this.saveInfo.bind(this);

。 SaveInfo方法沒有訪問權限。

相關問題