Reactjs 未处理的JS异常:this.setState不是函数
我是一个新的本地人,遇到一个错误“this.setState不是函数”。请帮我弄清楚这件事Reactjs 未处理的JS异常:this.setState不是函数,reactjs,react-native,Reactjs,React Native,我是一个新的本地人,遇到一个错误“this.setState不是函数”。请帮我弄清楚这件事 constructor(props) { super(props); this.facebookLogin = this.facebookLogin.bind(this); this.state = { ready: false, email:'', name:'' } } facebookLogin = ()
constructor(props) {
super(props);
this.facebookLogin = this.facebookLogin.bind(this);
this.state = {
ready: false,
email:'',
name:''
}
}
facebookLogin = () =>{
LoginManager.logInWithReadPermissions(['public_profile','email']).then(function(result){
if(result.isCancelled){
console.log('loging cancelled')
}
else {
console.log('login success' + result.grantedPermissions)
const infoRequest = new GraphRequest('/me', {
parameters: {
'fields': {
'string' : 'email,name'
}
}
},function(error, result) {
console.log(result)
if (error) {
alert('Error fetching data: ' + error.toString());
} else {
this.setState({name: result.name, email:result.email});
}});
new GraphRequestManager().addRequest(infoRequest).start();
}
}, function(error){
console.log('An error occured: ' + error)
})
}
**this.setState({name:result.name,email:result.email})**
使用FACEBOOK登录
谢谢。每次您声明像
function(){}
这样的函数时,它都会创建一个新的作用域,因此当您到达setState时,这个
不再是您的组件
一个快速修复方法是使用箭头函数:
()=>{}
因为它保留了作用域,或者通过变量将这个
从外部作用域传递到您需要它的地方。每次您声明一个类似函数(){}
的函数时,它都会创建一个新的作用域,因此在您开始设置state时,此
不再是您的组件
一个快速修复方法是使用箭头函数:
()=>{}
,因为它保留了作用域,或者通过变量将这个
从外部作用域传递到您需要它的地方。设置您尝试访问的状态在您的类作用域中可用。但是,您正在由您的某个操作调用的函数范围中调用setstate。作为问题的解决方案,您需要将其与onpress操作中的函数绑定在一起,即this.facebooklogin.bind(this)。这样,您就可以在函数中访问此类作用域。您可以将其存储在函数中的另一个变量中,并使用该变量调用setState
或者,您可以使用ES6 arrow函数来解决此问题。您试图访问的设置状态在您的类范围内可用。但是,您正在由您的某个操作调用的函数范围中调用setstate。作为问题的解决方案,您需要将其与onpress操作中的函数绑定在一起,即this.facebooklogin.bind(this)。这样,您就可以在函数中访问此类作用域。您可以将其存储在函数中的另一个变量中,并使用该变量调用setState
或者,您可以使用ES6 arrow函数来解决此问题。嘿,您的代码似乎缺少类声明。你能加上它吗?我假设第二段代码是渲染函数的一部分?facebookLogin是构造函数创建的类的一部分吗?你能编辑你的问题使其更清晰吗?调用this.setState的确切位置?this.setState在回调函数(错误,结果){}的内部调用。。。。将其替换为(error,result)=>{….},或者将其移动到构造函数内部绑定的单独方法中。您的代码似乎缺少类声明。你能加上它吗?我假设第二段代码是渲染函数的一部分?facebookLogin是构造函数创建的类的一部分吗?你能编辑你的问题使其更清晰吗?调用this.setState的确切位置?this.setState在回调函数(错误,结果){}的内部调用。。。。将其替换为(error,result)=>{….},或将其移动到构造函数内绑定(this)的单独方法
<TouchableOpacity style={styles.btnfb}
onPress={this.facebookLogin}>
<Text style={styles.buttonText}>LOGIN WITH FACEBOOK</Text>
</TouchableOpacity>