javascript - 如何将 Firebase 查询中的对象推送到 this.state

标签 javascript reactjs firebase firebase-realtime-database

我已从 Firebase 中提取数据。数据就在那里,console.log 证实了这一点。

(2) [{…}, {…}]
0:
id: 1.417253735436239
name: {Jack: true}
__proto__: Object
1:
id: 1.7540006580031215
name: {Jack: true, Jill: true}
__proto__: Object
length: 2

但是,我需要迭代这些数据来列出名称,但是当我尝试将此数据 setState 到数组中(明确在构造函数中声明)时,我得到“无法设置未定义的属性“setState”。

以下是 setList 函数不起作用的代码:

let users = [];
      listRef.on("value", function (snapshot) {
        users.push({
          id: 1 + Math.random(),
          name: snapshot.val()
        })
        console.log(users);
      });
      function setList(users){
        this.setState({ names: users})
      }
      setList();
    });
  }

Names 在构造函数的 this.state 中声明为数组。

我哪里出错了?

最佳答案

我已经克服了这个错误。在 block 内使用函数是错误的。我将 setState 从大括号中移出,并且没有该函数。

 setName = e => {
    e.preventDefault()
    this.setState({ [e.target.name]: e.target.value })
    let textBox = document.getElementById('inputDivId');
    textBox.style.display = "flex";
    let messagesBox = document.getElementById('messagesDivId');
    messagesBox.style.display = "flex";
    let thinkDel = document.getElementById('options');
    thinkDel.style.display = "flex";
    let nameBox = document.getElementById('nameDivId');
    nameBox.style.display = "none";

    // Add ourselves to presence list when online.
    let name = this.state.name;
    // let names = this.state.names;
    let connectedRef = firebase.database().ref('.info/connected');

    // let users = [];
    connectedRef.on('value', function (snap) {
      if (snap.val() === true) {
        const con = listRef.child(name);
        con.onDisconnect().remove();
        con.set(true);
      }

      let users = [];
      listRef.on("value", function (snapshot) {
        users.push({
          id: 1 + Math.random(),
          name: snapshot.val()
        })
        setList(users);
      });

      function setList(users) {
        this.setState({
          names: users
        })
      }
    });
  }

但是我仍然没有根据需要获取 this.state.names 中的数据!

关于javascript - 如何将 Firebase 查询中的对象推送到 this.state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878373/

相关文章:

javascript - 如果选中一个复选框,如何取消选中所有复选框?

javascript - 可选择的表行无法通过 jQuery AJAX 将 id 值发送到 PHP

reactjs - 在 React 中对表格行的显示/隐藏进行动画处理

firebase - 如何在 Firebase for web 上设置应用程序版本

android - 从 firebase 后端到 Android 前端的自动触发事件

javascript - 以编程方式设置时不应用 Bootstrap 类

javascript - 对象不支持属性或方法 'accordion'

javascript - 如何使 React 多步骤表单与 React Router 一起工作?

javascript - DOM 节点和 javascript 命名空间之间有什么关系?

firebase - Firebase 只能用于 iOS 和 Android 吗?