Как удалить данные из firebase, а также в массиве в React Native

#javascript #reactjs #firebase #react-native #firebase-realtime-database

# #javascript #reactjs #firebase #react-native #firebase-realtime-database

Вопрос:

Здравствуйте, я совершенно новичок в firebase, и я хотел бы знать, как я могу удалить ad, используя заголовок (или, по крайней мере, ключ?)

Вот как мне удалось перенести данные firebase в массив :

 componentDidMount(){
      firebase.database().ref('/ads').on('value', (snapshot) =>{
        var list = []
        snapshot.forEach((child)=>{
         list.push({
          key: child.key,
          title:child.val().title,
          details: child.val().details
        })
      })
     this.setState({adlist:list})
    })
   }
 

Вот как я отображался в FlatList (отображение работает):

  <FlatList 
            data={this.state.adlist}
            keyExtractor={(item)=>item.title}
            renderItem={({item})=>{
               return(
                <TouchableOpacity  OnPress ={()=>deleteAd(item.title)}>
                <View style={styles.container_2}>
                    <Text style={styles.text_style1}>{item.title}</Text>
                     <Text>{item.details}</Text>
                </View>
                </TouchableOpacity>
               )}}/>
 

Функция, которую я создал, чтобы удалить ее из firebase

 DeleteAds = (title)=>{
      dispatch(deleteAd(title));

    }

 

Это приводит к этой функции

 export const deleteAd = (title) => {
  return(dispatch)=>{
    firebase.database().ref('/ads/'   title).remove();
   
  }
 

Моя база данных firebase выглядит следующим образом:
введите описание изображения здесь

Когда я нажимаю кнопку, она не удаляется ни из firebase, ни из массива. В принципе, ничего не происходит.

Я буду признателен, если вы найдете способ улучшить мою функцию удаления или, может быть, как я должен передавать данные firebase в массив, чтобы я мог удалять с помощью ключа.

Комментарии:

1. Я также пытался выполнить firebase.database().ref(‘/ads’).remove();

Ответ №1:

Вы пытаетесь удалить узел по его названию. Итак, если вы удалите первый узел с заголовком dfdsd , вы удаляете путь /ads/dfdsd , которого не существует.

Чтобы удалить узел, вам нужно знать его ключ. Поэтому вам следует:

  1. Визуализируйте ключ в HTML, обычно таким образом, чтобы он не был виден пользователю.
  2. Затем передайте этот ключ deleteAd функции вместо заголовка.

В коде:

 <FlatList 
    data={this.state.adlist}
    keyExtractor={(item)=>item.key}
    renderItem={({item})=>{
       return(
        <TouchableOpacity  OnPress ={()=>deleteAd(item.key)}>
        <View style={styles.container_2}>
            <Text style={styles.text_style1}>{item.title}</Text>
             <Text>{item.details}</Text>
        </View>
        </TouchableOpacity>
       )}}/>
 

Вы заметите, что я также изменил keyExtractor={(item)=>item.key} , поскольку это, вероятно, также должно основываться на ключе узла, а не на его названии.

Комментарии:

1. Спасибо вам за помощь! Возможно, вы можете подсказать, как я могу извлечь ключ из базы данных и сохранить в массиве? В настоящее время у меня с этим проблемы.