Javascript 为什么我的所有文档都会被删除,而它只应该执行并删除一个特定的文档?
当我在React Native中进入此屏幕时,我的所有文档都将被删除。如何在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
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下面