【发布时间】:2020-08-02 22:29:44
【问题描述】:
我正在尝试从 Firestore 中的数据库加载一些数据,但我不明白为什么该变量会从中加载重复的文档。
在 Firestore 中,我有一个包含两个元素 test1 和 test2 的集合,如下面的屏幕截图所示。
我正在我的函数 seleccionarTest() 中加载完整的集合,我想加载带有两个文档(test1 和 test2)的 var 测试,我稍后将在 Touchable Flat List 中使用它们。
查看函数:
export default function AsignarTest({route, navigation}){
console.log("Entrando en asignar test");
const {usuario} = route.params;
const [animacion, setAnimacion] = useState(true);
const [tests, setTests] = useState([]);
const db = firestore();
function seleccionarTests(){
db.collection("test").get()
.then((querySnapshot) =>{
var i=0;
querySnapshot.forEach((documentSnapshot)=>{
tests.push({id:documentSnapshot.id, datos: documentSnapshot.data()});
});
setAnimacion(false);
console.log(tests);
return;
}).catch((error)=>{
console.log(error);
});
}
//Gestionamos cuando el usuario selecciona una peluqueria
const gestionarClick = (id)=>{
//Todo
console.log(id);
}
const p = seleccionarTests();
return(
<View style={estiloGlobal.container}>
<ActivityIndicator
size="small"
color = "#dd85be"
animating = {animacion} />
<View>
<FlatList
keyExtractor = {(item) => item.id}
data={tests}
renderItem= {({item})=> (
<TouchableOpacity
onPress={() =>{gestionarClick(item.id)}}>
<View style={estiloGlobal.lineaRecta}>
<View style={{paddingLeft: 10}}>
<Text style= {estiloGlobal.botonTexto}>{item.id}</Text>
</View>
</View>
</TouchableOpacity>
)} />
</View>
</View>
);
}
不幸的是,正如您在下一个屏幕截图中看到的那样,我在 console.log 中的 var 有 4 个文档(test1、test2、test1、test2),我不明白为什么这些文档会重复。
感谢您的 cmets!
【问题讨论】:
-
您的
seleccionarTests函数是否在其他地方的代码中多次调用?如果不能解决此问题,请在输入seleccionarTests函数或在 promise 解析时清除tests数组,这样您可以保证在开始推送数据之前数组为空。 -
谢谢,Ralemos。此解决方法解决了该问题。我仍然需要了解为什么该函数被调用两次,并且此信息被重复添加到变量中。
标签: react-native google-cloud-firestore