Javascript 使用React和firereact从Firebase中删除节点

Javascript 使用React和firereact从Firebase中删除节点,javascript,firebase,reactjs,Javascript,Firebase,Reactjs,我对reactfire的工作方式感到相当困惑,因为它在文档方面似乎不太明智 所以我想删除和更新一些子节点,但我不知道如何做。所有教程都只关注检索数据,这些数据被视为一个常规数组,我甚至似乎都无法访问它们的密钥 以下是官方的例子: 如何使用React执行这些操作 实例化FB后: ``` this.fb = new Firebase('https://react-testing.firebaseio.com/items'); this.bindAsArray(this.fb, 'items'); `

我对reactfire的工作方式感到相当困惑,因为它在文档方面似乎不太明智

所以我想删除和更新一些子节点,但我不知道如何做。所有教程都只关注检索数据,这些数据被视为一个常规数组,我甚至似乎都无法访问它们的密钥

以下是官方的例子:

如何使用React执行这些操作

实例化FB后:

```
this.fb = new Firebase('https://react-testing.firebaseio.com/items');
this.bindAsArray(this.fb, 'items');
```
“items”将绑定到此.state.items。酷,现在我有数据了


但我如何操纵它呢?获取对正在传递的项的引用的正确方法是什么?

正如我在评论中所说:ReactFire是常规Firebase JavaScript SDK的一小部分的小包装器。如果您想构建一个超出其能力范围的应用程序,您可以轻松地对其进行扩展

根据您的请求,我继续在ReactFire中更改了以下代码片段:

for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    out.push(obj[key]);
  }
}
为此:

for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    var item = obj[key];
    item['$id'] = key;
    out.push(item);
  }
}
因此,我们现在将每个项目的
key()
作为数组中项目的“特殊”
$id
属性传递

有了它,我可以将原始版本的
TodoList3
类扩展为:

var TodoList3 = React.createClass({
  handleClick: function(key) {
    if (this.props.onClick) {
      this.props.onClick(key);
    }
  },
  render: function() {
    var list = this;
    var createItem = function(item) {
      var boundClick = list.handleClick.bind(list, item['$id']);
      return <li key={ item['$id'] } onClick={boundClick}>{ item.text }</li>;
    };
    return <ul>{ this.props.items.map(createItem) }</ul>;
  }
});
然后,该应用程序将通过调用常规Firebase JavaScript SDK来删除该项

handleClick: function(key) {
  var firebaseRef = this.state.ref;
  firebaseRef.child(key).remove();
},
链接:


您可能已经注意到,ReactFire库是一个很小的包装器(135行,参见常规Firebase JavaScript SDK,不公开全部功能。如果您想使用Firebase和React构建应用程序,您应该花时间遵循常规Firebase指南:。有了这些知识,您将能够扩展ReactFire以允许更改。Frank,非常感谢您的快速帮助回复并更新代码,我真是太感谢你了。拥有一个易于访问的密钥在这里起到了很大的作用(我发现了一种将我自己生成的密钥存储在项目属性中的黑客方法,但它显然非常不安全),这使它变得非常容易。是的,我也会花一些时间正确地学习API:)干杯,弗兰克!
handleClick: function(key) {
  var firebaseRef = this.state.ref;
  firebaseRef.child(key).remove();
},