如何在react / firebase中正确使用child_added

时间:2016-11-09 11:08:22

标签: javascript reactjs firebase

我不完全确定这是正确的方法,但我试图在我的firebase数据库中附加用户可能收到的不同消息。

我点击按钮时调用了这个函数:

sendMessageButtonClicked: function(){
      var loggedInUser = this.state.loggedInUserObject;
      var databaseRef = firebase.database().ref().child('users/' + loggedInUser.useruid + '/messages/');
      databaseRef.on('child_added', function(snapshot){
        var messageBodyValue = document.getElementById('message').value;
        var chat = snapshot.val();
        var msg = document.getElementById('msgs');
        msg.appendChild(messageBodyValue);
      })
    },

但我收到错误:

failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'

我可以确认messageBodyValue是我输入的内容,例如'你好' chat是一个具有3个属性的对象 msg是一个id。

因此我每次发送时都会尝试将子项附加到此html元素。

我希望我的firebase JSON来自:

 "messages" : {
        "PHS2DwlCZ0RJaylhJ0FNgEiNLug2" : {
          "messageBody" : "Hello, how are you?",
          "receiverName" : "Lucy",
          "receiverUseruid" : "PHS2DwlCZ0RJaylhJ0FNgEiNLug2"
        }

为:

  "messages" : {
        "PHS2DwlCZ0RJaylhJ0FNgEiNLug2" : {
          "messageBody" : "Hello, how are you?",
          "messageBody" : "another msg",
          "messageBody" : "another child message",
          "receiverName" : "Lucy",
          "receiverUseruid" : "PHS2DwlCZ0RJaylhJ0FNgEiNLug2"
        }

1 个答案:

答案 0 :(得分:0)

在将messageBodyValue传递到appendChild之前,需要将var messageBodyValue = document.getElementById('message').value; var messageElement = document.createTextNode(messageBodyValue); var msg = document.getElementById('msgs'); msg.appendChild(messageElement); 包装在DOM节点中。

"PHS2DwlCZ0RJaylhJ0FNgEiNLug2" : {
  "messageBody" : "Hello, how are you?",
  "messageBody" : "another msg",
  "messageBody" : "another child message",
  "receiverName" : "Lucy",
  "receiverUseruid" : "PHS2DwlCZ0RJaylhJ0FNgEiNLug2"
}

这不应该影响Firebase实例中的数据结构,但看起来您尝试存储数据的方式可能存在问题。

messageBody

对象无法拥有多个messageBody属性。

相反,您必须抓住ngMaterial参考号,然后再push更多值。