如何根据Firebase中的密钥UID删除对象?

时间:2017-03-14 00:50:53

标签: javascript reactjs firebase firebase-realtime-database

我有一个React组件,列出了房间的UID(Firebase中的随机ID),以及roomNamecreator

list of room and creator

这是Firebase中的JSON结构:

firebase data structure

任务很简单,点击X后,我希望它删除任何关键用户点击的节点(及其子节点)。例如,如果用户点击第二个密钥x KetjGmLHYrbpX6xt_dd,则Firebase会删除KetjGmLHYrbpX6xt_dd RoomName: Holy Incubator | Creator: Robin

const dbRef = firebase.initializeApp(config).database().ref().child('rooms');

class App extends Component {
  constructor(){
    super();
    this.state = {
      text: '',
      roomName: '',
      creator: '',
      firebaseList: {},
      firebaseValuesArray: [],
      firebaseUIDArray: []
    }
  }
  componentDidMount(){
    dbRef.on('value', snap => {
      this.setState({
        firebaseList: snap.val(),
        firebaseUIDArray: Object.keys(snap.val())
      }, () => {});
    });
  }
...
//function that's supposed to remove the item
  removeItem(index){
    dbRef.child(index).remove();
  }
...
render(){
  return (
    ...
    <DisplayFirebaseValues removeItem={this.removeItem.bind(this)} firebaseList={this.state.firebaseList} />
...


//on DisplayFirebaseValues.js:

class DisplayFirebaseValues extends React.Component{
  render(){
    const firebaseUID = Object.keys(this.props.firebaseList).map((firebaseItem, index) => {
      return <li key={index}><a href="#" onClick={this.props.removeItem}>X</a> {firebaseItem}</li>
    })
...

我们的想法是传递DisplayFirebaseValues.js中的密钥(随机UID),以便removeItem(index)获取找到该特定Firebase UID的密钥,并删除该节点。但是,当我单击X时,我收到以下错误:

Uncaught Error: Firebase.child failed: First argument was an invalid path: "[object Object]". Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]"

如何让它工作,以便用户点击X并删除该特定数据?我试过了this SO post,但它没有用。我错过了什么,但不能说出什么。

PS :如果有帮助,我将整个rooms对象存储在this.state.firebaseList以及this.state.firebaseUIDArray

中的所有密钥中
firebaseList:  Object {-KeoiS8luCsuKhzc_Eut: Object, -KetjGmLHYrbpX6xt_dd: Object, -Kf99qMofAEvj1ajmPc5: Object}
firebaseUIDArray:  ["-KeoiS8luCsuKhzc_Eut", "-KetjGmLHYrbpX6xt_dd", "-Kf99qMofAEvj1ajmPc5"]

0 个答案:

没有答案