我的删除按钮和创建按钮无法正常工作,我一直收到此错误:


  未捕获的错误:reference.child失败:第一个参数是无效路径


javascript - 无法在 react 堆中删除要删除的项目-LMLPHP

 import React, { Component } from 'react';
    import { View, Text, StyleSheet, Button, TextInput, TouchableOpacity, selectedId } from 'react-native';
    import firebase from './firebase';
    export default class App extends Component {
    carDatabase = firebase.database().ref('car');
     state = { cars: {}, selectedId: '' }
     // Read
     componentDidMount() {
       this.carDatabase.on('value', cars => {
         const carsJSON = cars.val();
         this.setState({ cars: carsJSON === null ? {} : carsJSON });
       })
       // this.carDatabase.push({color: 'yellow'})
     }
     // Create
     create() {
       this.carDatabase.push({color: 'yellow'})
       this.setState({selectedId: ''})
     }
     // Update
     update() {
      this.carDatabase.child(this.state.selectedId).set({color: 'blue'})
      this.setState({selectedId: ''})
    }
     // Delete
     deleteCar() {
        if(this.state.selectedId === '') {
          return;

        }
       // firebase.database().ref('car/').remove
       this.carDatabase.child(this.state.selectedId).set(null)
      this.setState({selectedId: ''})
    }
        render() {
            return (
                <View style={styles.container}>
                 <TextInput value={this.state.selectedId} style={styles.textInput}></TextInput>
                   <Button title="create" onPress={() => this.create()}></Button>
                   <Button title="update" onPress={() => this.update()}></Button>
                   <Button title="delete" onPress={() => this.deleteCar()}></Button>
                   {
       Object.keys(this.state.cars).map( ( index) =>
       <TouchableOpacity key={index} onPress={() => this.setState({ selectedId})}>
         <Text>{JSON.stringify(this.state.cars[index])}</Text>
       </TouchableOpacity>
     )
    }

           {/* <Text>{JSON.stringify(this.state.cars, null, 2)}</Text> */}
         </View>
            );
        }
    }
    const styles = StyleSheet.create({
     textInput: {
       backgroundColor: 'green',
       height: 30,
       width: '100%'
     },
        container: {
            flex: 1,
            backgroundColor: '#fff',
            alignItems: 'center',
            justifyContent: 'center'
     }
    });

最佳答案

看起来this.state.selectedId包含的内容不是数据库中的有效路径。您可以通过在使用值之前记录该值来找出实际的含义。例如:

deleteCar() {
  console.log(this.state.selectedId)
  this.carDatabase.child(this.state.selectedId).set(null)
  this.setState({selectedId: ''})
}


很有可能this.state.selectedId为null或为空。现在,您只检查一个空字符串,因此,如果这样做,则可能会得到更好的结果:

deleteCar() {
  if (this.state.selectedId && this.state.selectedId.length) {
    this.carDatabase.child(this.state.selectedId).set(null)
    this.setState({selectedId: ''})
  }
}

10-05 20:38
查看更多