Не могу получить предмет для удаления в FireBase с реакцией - PullRequest
0 голосов
/ 23 октября 2019

Моя кнопка удаления и кнопка создания не работают, я получаю эту ошибку:

необработанная ошибка: reference.child не удалось: первый аргумент был неверным путем

enter image description here

 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'
     }
    });

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Object.keys (this.state.cars) .map ((carId, index) => this.setState ({selectedId: carId})}> {${carId}: ${JSON.stringify(this.state.cars[index])}}

0 голосов
/ 23 октября 2019

Похоже, this.state.selectedId содержит что-то, что не является допустимым путем в вашей базе данных. Вы можете узнать, что это на самом деле, зарегистрировав значение, прежде чем использовать его. Например:

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

Скорее всего, кажется, что this.state.selectedId является нулевым или пустым. Сейчас вы проверяете только пустую строку, так что вы могли бы получить лучшие результаты, если бы вместо этого сделали следующее:

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