2017-10-11 41 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方法没有访问权限。

相关问题