React不调用函数

时间:2018-09-29 23:33:37

标签: javascript reactjs firebase react-native this

  teste(){
   console.log('a');
  }

 componentDidMount() {
   // firebase things?
   firebase.database().ref('Matheus').on('value', function(snapshot){
     itens = snapshot.val();
     itens.forEach((data) => {
     firebase.storage().ref(data).getDownloadURL().then(this.teste);
   });
 });

代码有效。只能调用函数 this.teste

1 个答案:

答案 0 :(得分:2)

在内部函数中运行时,context of this已更改。
可以将this存储在临时变量中以在函数内部使用它:

 componentDidMount() {
    const that = this; // holding the context for this
   // firebase things?
   firebase.database().ref('Matheus').on('value', function(snapshot){
     itens = snapshot.val();
     itens.forEach((data) => {
     firebase.storage().ref(data).getDownloadURL().then(that.teste); // using that instead of this
   });
 });

或使用arrow function,它将为this使用词法上下文:

 componentDidMount() {
    const that = this; // holding the context for this
   // firebase things?
   firebase.database().ref('Matheus').on('value', (snapshot) => { // arrow function instead
     itens = snapshot.val();
     itens.forEach((data) => {
     firebase.storage().ref(data).getDownloadURL().then(that.teste);
   });
 });