javascript - 尝试添加到状态数组抛出 Cannot read property 'setState' of null

标签 javascript arrays reactjs firebase firebase-realtime-database

我要做的是从 firebase 获取一系列问题,我确实得到了它,正如 console.logs 显示的那样。

唯一的问题是当我尝试将该数组添加到我的状态“preguntas”时,我最初将其设置为 null,然后将其更改为 [] 认为可能是这样。我还尝试过 concat 和我发现的其他东西。

有一件事我也做过,虽然不知道是不是别的原因,但我尝试过

preguntasRef.on('value', snap => ...

只是为了得到相同的结果。但这可能是因为我尝试将数组设置为我的状态的方式。

基本上,我不知道是否在某个时候我确实得到了答案,只是错误地实现了它,所以我仍然无法将从 firebase 获得的信息添加到我的状态中。

(图像更新,上一张图像没有问题键,因为问题也是从应用程序上传的)。 这是 Firebase 中的数据库:

enter image description here

这是我的代码:

constructor(props) {
        super(props);

        this.state= {
            preguntas: [],
            ponenteSelect: this.props.match.params.id,
            idOrador: this.props.location.state
        }
    }

    componentWillMount(){
        var preguntasRef = firebase.database().ref(this.state.idOrador).child("preguntas");
        preguntasRef.on('value', this.gotData, this.errData);
        /*preguntasRef.on('value', snap =>{
            this.setState({
                preguntas: snap.val()
            });
        });*/
    }

    gotData(data){
        let preguntasFirebase = data.val();
        console.log(preguntasFirebase);
        if (preguntasFirebase !== null) {
            this.setState({ preguntas: this.state.preguntas.concat(preguntasFirebase)});
            //this.setState({ preguntas: [...this.state.preguntas, ...preguntasFirebase]});

            //console.log(`Json preguntas ${jsonPregs}`);
            /*let keys = Object.keys(preguntas);
            for (let i=0; i<keys.length;i++){
                let k = keys[i];
                let pregunta = preguntas[k].pregunta;
                conjuntoPregs.push(pregunta);
            }*/
        }
    }
    errData(err){
        console.log('Error!', err);
    }

如您所见,我主要尝试了三件事。第一个是使用 Reference.on(vale, snap=>),第二个是使用 on 和一个带有 for 的函数,第三个是在同一个函数中,我刚刚注释了 for 并直接执行了 setState。

最佳答案

在构造函数中添加

this.gotData = this.gotData.bind(this)

我还发现一个问题,请将 setState 更新为以下内容(避免突变)

this.setState({ preguntas: [...this.state.preguntas].concat(preguntasFirebase)});

关于javascript - 尝试添加到状态数组抛出 Cannot read property 'setState' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52521186/

相关文章:

javascript - HTML/JavaScript : mouseover effect for image maps?

Javascript substring() 从我的字符串中返回错误的值?

javascript - javascript 中的 .length 是否遍历整个数组?

javascript - 是否需要检查元素是否具有属性?

javascript - 超链接 HTML 中的有序列表

arrays - 索引和小于 K 的网格中的点数

javascript - 如何在javascript中根据提示存储数组的值?

reactjs - 在 package.json 中设置主页不会在构建时设置 PUBLIC_URL

javascript - React 有望在全局范围内可用

reactjs - 如何自定义 React Native TextInput 的高度?