【问题标题】:delete from firebase real time database从 firebase 实时数据库中删除
【发布时间】:2021-06-04 14:51:19
【问题描述】:

它列出了一个平面的房间列表,这些房间里面是消息。所以我想长按列表中的一个特定房间,当我这样做时,我想删除一个房间。

onLongPress={() =>  this.roomsRef.remove({item})}

我认为上述方法会起作用,但它失败了。我把它放在渲染行部分。它出现说 Reference.remove 失败。第一个参数必须是有效的函数。就像在这些房间里一样,它有消息,我认为这就是我出错的地方,但我不知道该怎么做。谢谢

 'use strict'
    import React, { Component, useEffect } from 'react';
    import { Text, Image, TextInput, TouchableHighlight, StatusBar, FlatList, View, TouchableOpacity, Dimensions, LogBox, Alert } from 'react-native';
// import firebaseApp from './firebaseConfig.js';
import firebaseApp from '../config/firebasekeys';
import {SafeAreaView} from 'react-native-safe-area-context'
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'

import {Avatar} from 'react-native-elements'
import { color } from 'react-native-reanimated';

const DeviceHeight = Dimensions.get('screen').height
const DeviceWidth = Dimensions.get('screen').width


class Rooms extends Component {
    
    static navigationOptions = {
        title: 'Rooms',
      
    };

    constructor(props) {
        super(props);
            var firebaseDB = firebaseApp.database();
            this.roomsRef = firebaseDB.ref('rooms'); // rooms collection
            this.state = {
            rooms: [],
            newRoom: ''
        }
    }


    // maybe its this.roomsRef.remove(item.name) or maybe its name idk hmmm

    componentDidMount() {
        LogBox.ignoreLogs(['VirtualizedLists should never be nested']); // doing this to ignore the log box error for scroll view
        this.listenForRooms(this.roomsRef);
    }

    listenForRooms(roomsRef) {
        roomsRef.on('value', (dataSnapshot) => {
        var roomsFB = [];
        dataSnapshot.forEach((child) => {
            roomsFB.push({
            name: child.val().name,
            key: child.key
            });
        });
        this.setState({ rooms: roomsFB });
        });
    }

    addRoom() {
        if (this.state.newRoom === '') {
            return
        }
        this.roomsRef.push({ name: this.state.newRoom });
        this.setState({ newRoom: '' });
    }

    openMessages(room) {
        this.props.navigation.navigate("Messages", {roomKey: room.key, roomName: room.name});
    }

    renderRow(item) {
        return (
        <TouchableOpacity 
        
            onPress={() => this.openMessages(item)}
            onLongPress={() =>  this.roomsRef.remove({name:item})}
            
            > 
            

            <Text style={{   
                color: 'orange',
                fontSize: 22,
                }}>{item.name}</Text>
        </TouchableOpacity>

      



        



        )


        
    }

  render() {
        return (
        <SafeAreaView style={styles.container}>
        <StatusBar style="auto"/>
        <KeyboardAwareScrollView>
        
        
            
            
            <View>       
               
                <View >

                    <TextInput>
                        
                        }}
                        placeholder={"enter chat name"}
                        onChangeText={(text) => this.setState({newRoom: text})}
                        value={this.state.newRoom}
                    />
                    <TouchableHighlight
                        style={{
                            marginRight: 20
                        }}
                        onPress={() => this.addRoom()}
                        
                        >
                       >
                    </TouchableHighlight>

                </View>

                <View>
                <FlatList
                    data={this.state.rooms}
                    renderItem={({item}) => (this.renderRow(item)
                    )}


                />

                 
                </View>

                    {/* <View>
                    <FlatList
                        data={this.state.rooms}
                        renderItem={({item}) => (this.renderRow(item)
                        )}
                    />

                    </View> */}
            
            </View>

        

        </KeyboardAwareScrollView>
        </SafeAreaView>

        );
    }
}

export default Rooms;

【问题讨论】:

    标签: node.js firebase react-native firebase-realtime-database


    【解决方案1】:

    我建议您在开发过程中将reference docs for the API 放在手边,因为您可以通过这种方式发现很多问题。例如,Reference.remove() method 不将项目作为其参数(实际上:它通常在不带参数的情况下调用)。

    delete a specific node,你应该建立一个对该节点的引用,然后在引用上调用remove()

    roomsRef.child("keyOfRoomToRemove").remove()
    

    【讨论】:

    • 嗨,谢谢您的回复!:) 我如何才能删除房间的钥匙?
    • 假设数据来自DataSnapshot,您可以通过snapshot.key 获取密钥。再说一遍:请保持参考文档是您的朋友,因为实时数据库 API 非常小。
    • 我才意识到这是 item.key,我的错!谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2020-01-17
    • 2019-12-24
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多