Javascript React firebase auth()设置状态不在内部工作然后()
我从firebase文档登录了这个twitter,我想保存Javascript React firebase auth()设置状态不在内部工作然后(),javascript,reactjs,firebase,firebase-realtime-database,firebase-authentication,Javascript,Reactjs,Firebase,Firebase Realtime Database,Firebase Authentication,我从firebase文档登录了这个twitter,我想保存uid状态,但它不起作用。知道这是怎么回事吗 twitterSignin(provider) { var provider = new firebase.auth.TwitterAuthProvider(); var getStoreID = this.props.storeId; firebase.auth().signInWithPopup(provider) .then(function
uid
状态,但它不起作用。知道这是怎么回事吗
twitterSignin(provider) {
var provider = new firebase.auth.TwitterAuthProvider();
var getStoreID = this.props.storeId;
firebase.auth().signInWithPopup(provider)
.then(function (result) {
var token = result.credential.accessToken;
var user = result.user;
var ref = firebase.database().ref(getStoreID);
ref.once("value")
.then(function (snapshot) {
var data = snapshot.val();
if (!data.owner) {
ref.set({
owner: result.user.uid
})
}
this.setState({
uid: result.user.uid
})
});
}).catch(function (error) {
console.log(error.code)
console.log(error.message)
});
}
谢谢
固定的:
twitterSignin(provider) {
var provider = new firebase.auth.TwitterAuthProvider();
var getStoreID = this.props.storeId;
var that = this;
firebase.auth().signInWithPopup(provider)
.then(function (result) {
var token = result.credential.accessToken;
var user = result.user;
var ref = firebase.database().ref(getStoreID);
ref.once("value")
.then(function (snapshot) {
var data = snapshot.val();
if (!data.owner) {
ref.set({
owner: result.user.uid
})
}
that.setState({
uid: result.user.uid
})
});
}).catch(function (error) {
console.log(error.code)
console.log(error.message)
});
}
问题是您试图从不同的范围访问
setState
。为了解决这个问题,您需要将回调绑定到实例。为此,您有两个选项,使用bind
,缓存父作用域const me=this
然后在回调中使用me
,或者使用箭头函数
twitterSignin(provider) {
var provider = new firebase.auth.TwitterAuthProvider();
var getStoreID = this.props.storeId;
firebase.auth().signInWithPopup(provider)
.then((result) => {
var token = result.credential.accessToken;
var user = result.user;
var ref = firebase.database().ref(getStoreID);
ref.once("value")
.then((snapshot) => {
var data = snapshot.val();
if (!data.owner) {
ref.set({
owner: result.user.uid
})
}
this.setState({
uid: result.user.uid
})
});
}).catch(function (error) {
console.log(error.code)
console.log(error.message)
});
}
我会使用箭头功能
twitterSignin(provider) {
var provider = new firebase.auth.TwitterAuthProvider();
var getStoreID = this.props.storeId;
firebase.auth().signInWithPopup(provider)
.then((result) => {
var token = result.credential.accessToken;
var user = result.user;
var ref = firebase.database().ref(getStoreID);
ref.once("value")
.then((snapshot) => {
var data = snapshot.val();
if (!data.owner) {
ref.set({
owner: result.user.uid
})
}
this.setState({
uid: result.user.uid
})
});
}).catch(function (error) {
console.log(error.code)
console.log(error.message)
});
}
箭头函数在外部作用域中执行,在本例中是
twitterSignin
的作用域,它是您的react组件,具有setState
:)您有任何错误吗?