Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的所有文档都会被删除,而它只应该执行并删除一个特定的文档?_Javascript_Firebase_React Native_Google Cloud Firestore - Fatal编程技术网

Javascript 为什么我的所有文档都会被删除,而它只应该执行并删除一个特定的文档?

Javascript 为什么我的所有文档都会被删除,而它只应该执行并删除一个特定的文档?,javascript,firebase,react-native,google-cloud-firestore,Javascript,Firebase,React Native,Google Cloud Firestore,当我在React Native中进入此屏幕时,我的所有文档都将被删除。如何在deleteTodo()中获取用于删除doc.id为key的文档的代码。我以为deleteTodo只会在按下TouchableOpacity时执行,但它会在我进入屏幕时执行 useEffect(() => { firebase .firestore() .collection('users') .doc(uid) .collec

当我在React Native中进入此屏幕时,我的所有文档都将被删除。如何在
deleteTodo()
中获取用于删除doc.id为
key
的文档的代码。我以为deleteTodo只会在按下
TouchableOpacity
时执行,但它会在我进入屏幕时执行

useEffect(() => {
        firebase
         .firestore()
         .collection('users')
         .doc(uid)
         .collection('tasks')
         .get()
         .then((snapshot) => {
       
           const docList = []
       
           snapshot.forEach((doc) => {
             docList.push({
                 key: doc.id,
                 task: doc.data().task,
                 completed: doc.data().completed,
             });
           })
           setList(docList);
         })
         .catch((error) => {
           console.log(error)
         })
       }, [])

       function deleteTodo(key) {
        var uid = firebase.auth().currentUser.uid;

        firebase.firestore().collection('users').doc(uid).collection('tasks').doc(key).delete().then(() => {
            console.log("Successfully deleted document!")
        }).catch(error => console.log(error));
   }

       swipeRight = (key) => {
           return(
            <View style={styles.rightAction}>
                <TouchableOpacity onPress={deleteTodo(key)}>
                    <Icon name="trash" size={28} color={"red"} />
                </TouchableOpacity>
           </View>
           )
       }

        return (
            <View style={styles.container}>
                <Text style={styles.title}>Here is your tasks for today</Text>
                    <View style={styles.taskList}>
                        <FlatList style={{width: '100%'}}
                            data={list}
                            keyExtractor={(item) => item.key}
                            renderItem={({item}) => {
                                return(
                                    <Swipeable renderRightActions={() => swipeRight(item.key)}>
                                        <TouchableOpacity style={styles.task} onPress={() => console.log("This button got pressed")}>
                                            <Text style={{margin: 15, textDecorationLine: item.completed ? 'line-through' : 'none'}}>{item.task}</Text>
                                        </TouchableOpacity>
                                    </Swipeable>
                                )
                            }}
                        />
                    </View>
                <View style={styles.taskcreation}>
                    <TextInput
                        style={styles.inputBox}
                        value={task}
                        onChangeText={(task) => setTask(task)}
                        placeholder='What do you want to do?'
                    />
                    <TouchableOpacity style={styles.button} onPress={handleTaskCreation}>
                        <Text style={styles.buttonText}>Create task</Text>
                    </TouchableOpacity>
                </View>
            </View>
        )
    }
useffect(()=>{
火基
.firestore()
.collection('用户')
.doc(uid)
.collection(“任务”)
.get()
。然后((快照)=>{
常数docList=[]
snapshot.forEach((doc)=>{
docList.push({
关键字:doc.id,
任务:doc.data().task,
已完成:文档数据()已完成,
});
})
设置列表(docList);
})
.catch((错误)=>{
console.log(错误)
})
}, [])
函数deleteTodo(键){
var uid=firebase.auth().currentUser.uid;
firebase.firestore().collection('users').doc(uid)。collection('tasks').doc(key)。delete()。然后(()=>{
log(“已成功删除文档!”)
}).catch(错误=>console.log(错误));
}
swipeRight=(按键)=>{
返回(
)
}
返回(
这是你今天的任务
item.key}
renderItem={({item})=>{
返回(
SwiperRight(项.键)}>
console.log(“此按钮被按下”)}>
{item.task}
)
}}
/>
setTask(任务)}
占位符=“您想做什么?”
/>
创建任务
)
}

由于您在flatlist中并在渲染中使用项,请将“键”更改为“项”,如下所示:

 const deleteTodo = (item) => {
  const uid = firebase.auth().currentUser.uid;

  firebase
   .firestore()
   .collection('users')  
   .doc(uid)
   .collection('tasks')
   .doc(item.key)
   .delete()
   .then(() => {
      console.log("Successfully deleted document!")
    })
   .catch(error => console.log(error));
 }


 const swipeRight = (item) => {
     return (
       <RectButton onPress={() => deleteTodo(item)}>
          <Icon name="trash" size={28} color={"red"} />
       </RectButton>
     );
 };
const deleteTodo=(项)=>{
const uid=firebase.auth().currentUser.uid;
火基
.firestore()
.collection('用户')
.doc(uid)
.collection(“任务”)
.doc(item.key)
1.删除()
.然后(()=>{
log(“已成功删除文档!”)
})
.catch(错误=>console.log(错误));
}
常量swipeRight=(项目)=>{
返回(
删除待办事项(项目)}>
);
};
可刷卡的

  <Swipeable renderRightActions={() => swipeRight(item)}>
    <Text style={{margin: 15, 
      textDecorationLine: item.completed ? 'line- 
      through' : 'none'}}>
         {item.task}
    </Text>
  </Swipeable>
swipeRight(项目)}>
{item.task}

我仍然得到同样的结果。“任务”-集合中的所有文档都将被删除。如果您使用console log item.key,您是否正在获取文档id?好的,因此当我运行console.log(item.key)时,我会打印出文档id,但id会打印出4次。控制台日志是否在deleteTodo方法中。doc(item.key)是console.log就在deleteTodo内的var uid下面