为什么我的功能无法识别我的其他功能?
为什么我得到错误:Uncaught ReferenceError: writeUserData is not defined(…)
为什么我的功能无法识别我的其他功能?
或其他错误,当我包括this.writeUserData
是:Cannot read property 'writeUserData' of undefined
功能仍然张贴正确的数据,以火力那么为什么抱怨? 等等,那么在另一个函数中调用函数的正确方法是什么。我认为这是正确的做法吗?
signUserUp(){
let name = this.state.nameValue;
let slackName = this.state.slackNameValue;
let email = this.state.emailValue;
let password = this.state.passwordValue;
firebase.auth().createUserWithEmailAndPassword(email, password).then(
function(result){
writeUserData(name, result.uid, email, slackName);
},
function(error){
let errorCode = error.code;
let errorMessage = error.message;
console.log(errorMessage, '***');
console.log(errorCode, 'code');
});
};
writeUserData(name, useruid, email, slackName){
firebase.database().ref('/pairs/' + useruid).set({
name: name,
useruid: useruid,
email: email,
slackName: slackName
});
}
编辑:此代码是用ES6语法阵营组件内...
对于你的第一个问题:原因是你没有宣布writeUserData
的功能。
下面是一个类似于Alexey Soshin的答案,但有一个替代语法。
var signUserUp = function() {
let name = this.state.nameValue;
let slackName = this.state.slackNameValue;
let email = this.state.emailValue;
let password = this.state.passwordValue;
firebase.auth().createUserWithEmailAndPassword(email, password).then(
function(result){
writeUserData(name, result.uid, email, slackName);
},
function(error){
let errorCode = error.code;
let errorMessage = error.message;
console.log(errorMessage, '***');
console.log(errorCode, 'code');
});
};
var writeUserData = function (name, useruid, email, slackName) {
firebase.database().ref('/pairs/' + useruid).set({
name: name,
useruid: useruid,
email: email,
slackName: slackName
});
}
关于第二个问题( “...当我包括this.writeUserData
... Cannot read property 'writeUserData' of undefined
”):在这种情况下this
是不确定的。
要为第二个问题定义this
,您必须在this
内定义您的writeUserData
。
定义writeUserData
内this
:
-
添加它的父函数的原型
signUserUp.prototype.writeUserData = function(name, useruid, email, slackName) { ... }
-
绑定父功能子功能
firebase.auth().createUserWithEmailAndPassword(email, password).then(...).bind(this);
的
-
绑定子功能的
this
你的功能function(result) { ... }.bind(this),
this
...这是尴尬。所以这是第一种方式!:)
var signUserUp = function() {
let name = this.state.nameValue;
let slackName = this.state.slackNameValue;
let email = this.state.emailValue;
let password = this.state.passwordValue;
signUserUp.prototype.writeUserData = function(name, useruid, email, slackName) {
firebase.database().ref('/pairs/' + useruid).set({
name: name,
useruid: useruid,
email: email,
slackName: slackName
});
}
firebase.auth().createUserWithEmailAndPassword(email, password).then(
function(result) {
this.writeUserData(name, result.uid, email, slackName);
}.bind(this),
function(error) {
let errorCode = error.code;
let errorMessage = error.message;
console.log(errorMessage, '***');
console.log(errorCode, 'code');
}).bind(this);
};
你只需要把它声明为一个函数:
function writeUserData(name, useruid, email, slackName){...};
你认为它成功仅仅是因为createUserWithEmailAndPassword()
创建你的用户,并且只有在这之后调用成功处理程序。
但这却从未在你的情况下执行:
firebase.database().ref('/pairs/' + useruid).set
但我使用ES6的语法是正确的正确方式宣布其为阵营组件内? –
我在React组件中声明了它,这是ES6声明函数的方法吗? –
但是你没有使用关键字'功能'权利? –
嗯......它看起来像你在考虑ES6类(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes)。我需要更多地阅读...... –