【问题标题】:React native trouble calling function within another function?在另一个函数中反应本机故障调用函数?
【发布时间】:2024-04-28 03:30:03
【问题描述】:

在我的 React-native 应用程序中,我试图在我的 listenForItems 函数中调用另一个函数,但不断收到错误 this.populateArray is not a function. In 'this.populateArray(solutions)', this.populateArray is undefined. 我在其他类中执行此操作并且它正在工作,但由于某种原因它在这里不起作用。有什么我想念的吗?

populateArray: function(solutions) {
    var completed = [];
    var inProgress;

    for (var i = 0; i < solutions.length; i++ ) {
        if (solutions[i].completed == 0) {
            inProgress = solutions[i].id;
        }
        else {
            completed.push(solutions[i].id);
        }
    }
},  

listenForItems: function(cluesRef) {

    var solutions = [];
    userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', function(snap){
        var solution = snap.val();
        for (var i = 0; i < solution.length; i++) {
            if (solution[0].hunt_id == 0) {
                solutions.push(solution[0]);
            }
        }
        this.populateArray(solutions);
    });
},

【问题讨论】:

    标签: javascript function reactjs firebase react-native


    【解决方案1】:

    javascript 的经典 this 范围问题。谷歌将帮助更好地理解。简而言之,函数中的“this”一词指的是该函数。在此示例中,它指的是您在 userSolutionsRef.orderByChild 中使用的匿名函数(回调)。有很多方法可以解决这个问题。您可以使用 ES6(ES2015) 箭头函数,在这种情况下,它会变成类似

    userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', (snap) => {
        var solution = snap.val();
        for (var i = 0; i < solution.length; i++) {
            if (solution[0].hunt_id == 0) {
                solutions.push(solution[0]);
            }
        }
        this.populateArray(solutions);
    });
    

    或者es5解决方案

    var that = this;
    userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', function(snap){
            var solution = snap.val();
            for (var i = 0; i < solution.length; i++) {
                if (solution[0].hunt_id == 0) {
                    solutions.push(solution[0]);
                }
            }
            that.populateArray(solutions);
        });
    

    【讨论】: