J'essaie d'obtenir une base de données DATA FireBase Realtime. Je peux montrer des données avec console.log () mais je ne peux pas montrer dans la liste des plats. J'ai essayé différentes manières de résoudre ce problème. Mais, je ne pouvais trouver aucune solution certaine. Ici, mon arbre Json en Firebase:
p>
ici, mon code : P>
const NotesList = (props) => { const { colors } = useTheme(); const styles = customStyles(colors); const user = auth().currentUser const [data, setData] = useState([]); const [loading, setLoading] = useState(false); const getData = () => { firebase.database().ref(`notes/`).on('value', function (snapshot) { console.log(snapshot.val()) }); } useEffect(() => { setTimeout(() => { setData(getData); setLoading(true); }, 1000); }, []); const renderItem = ({ item }) => { return ( <View style={{ marginRight: 10, marginLeft: 10 }}> <TouchableOpacity> <NoteCard title={item.noteTitle} icerik={item.noteDetails} date={item.timestamp} /> </TouchableOpacity> </View> ); }; const split = () => { let icerik = data.map((item, key) => item.icerik); return icerik.slice(0, 1) + '...'; }; return ( <View style={styles.container}> <StatusBar barStyle="light-content" /> <NoteSearchBar /> {!loading ? ( <View style={{ alignItems: 'center' }}> <ActivityIndicator color="#ff5227" /> </View> ) : ( <FlatList data={data} numColumns={2} renderItem={renderItem} keyExtractor={(item, index) => index.toString()} /> )} <TouchableOpacity style={styles.addButton} onPress={() => props.navigation.navigate('AddNote')}> <Plus width={40} height={40} fill="white" margin={10} /> </TouchableOpacity> </View> ); };
3 Réponses :
Votre maintenant l'appel à getdata code> n'est pas
setdata code> dans votre
getdata code>:
setData code> sera Placez le JSON dans l'état, ce qui, à leur tour, réagit pour repeindre l'interface utilisateur avec les nouvelles données. P> p>
Bonjour Frank, j'ai essayé votre suggestion, mais j'ai toujours le même problème, et j'ai eu une erreur d'index lorsque nous le faisons. Comme je l'ai mentionné, je peux voir les données de la console, mais je ne peux pas le montrer dans la liste.
Aucun des indicateurs de ma réponse n'accède à rien avec une gamme, donc si vous obtenez maintenant cette erreur, il s'agit probablement d'un code que vous avez déjà eu. En fait, je m'attends à ce que cela soit un bon signe, car cela signifie probablement que votre code de rendu est maintenant invoqué avec les données de la base de données et que l'erreur provient du code qui n'était pas appelé auparavant.
Ciao, fondamentalement, vous avez fait 2 erreur:
getdata code> ne peut pas ne rien retourner que les données ne seront jamais mises à jour avec des valeurs de Firebase; Li>
-
useEffect code> a une implémentation étrange (c'est un appel inutile Settimeout code> Vous attendez déjà des données de Firebase); Li>
ol> Ma suggestion est d'appeler getdata code> à partir de useEffect code> comme ceci: p> xxx pré> et modifier < Code> getdata code> comme ceci: p> xxx pré> p>
Bonjour Gio, j'ai essayé votre suggestion, mais j'ai toujours le même problème et j'ai eu une erreur de plage d'index lorsque nous le faisons. Comme je l'ai mentionné, je peux voir les données de la console, mais je ne peux pas le montrer dans la liste. C'est un résultat similaire avec Frank.
CIAO, j'ai essayé de reproduire votre liste de note de note dans Ceci codesendbox. Il est presque égal (à l'exception de la barre de notes, de la noeud et des données). Comme vous pouvez le constater, la flatliste est visible avec des données correctes. En supposant que la barre de notation et les données ne sont pas le problème, peut-être que Notecard échoue ... Je ne sais pas, que pensez-vous?
J'ai trouvé une solution et je veux le partager avec vous les gars.
J'ai gardé les données de Firebase en tant qu'enfant à une nouvelle valeur, puis je l'ai mise à Sedata. De cette façon, je peux afficher les données de la liste des plats. De plus, tandis que Firebase Realtime DB fonctionnait, une nouvelle méthode appelée méthode d'objet aidé lors de la prise de valeurs de l'enfant dans l'arbre JSON. p> p>
Comme je l'ai dit dans ma réponse, ici aussi vous appelez setdata code> dans le rappel du
sur ('valeur' code>. Bien que ce soit possible, votre message d'origine a eu plusieurs problèmes, il est courant de reconnaître Lorsque vous utilisez la réponse de quelqu'un pour résoudre votre problème.