Ir ao conteúdo
  • Cadastre-se

Javascript Bug lista de usuários React Native


Posts recomendados

Boa tarde, estou tentando listar uma lista de usuários do banco de dados firebase, porém ela não está carregando quando inicia o aplicativo ou quando pressiono "RR" no emulador do android studio, já tentei no meu celular e a mesma coisa acontece, nada é carregado list.length = 0, porém se eu der um ctrl+s no vscode a lista é carregada duplicada, pra resolver o problema da duplicação coloquei um if(list.length < 1){carrega lista}, apesar da lista carregar sem duplicar agora, o bug de não carregar ao inicio ou no refresh pelo "RR" ainda continua, desconfio que o problema seja a utilização do list.push() no código, deveria utilizar setList(), porém ele só iria executar na última execução do snapshot.forEach() e só iria preencher com 1 usuário a minha lista, mesmo assim andei pesquisando e vi que usar o setList() dentro de um loop era uma má pratica e que não deveria acontecer, então o que eu poderia fazer para consertar o bug e listar os usuários?

 

Aqui está o código atual:

Spoiler

import React, { useState, useEffect } from 'react';
import { View, Text, FlatList, ActivityIndicator } from 'react-native';
import { firebase } from '@react-native-firebase/database';

export default function App(){
    const [list, setList] = useState([]);
    const [load, setLoad] = useState(true);

    useEffect(()=>{
        async function loadList(){
            if(list.length < 1){
                let ref = await firebase.database().ref('usuarios');
                
                const listener = await ref.on('value', (snapshot)=>{
                    snapshot.forEach((childItem)=>{
                      
                        let key = childItem.key;
                        let nome = snapshot.child(key).val().nome;
                        let idade = snapshot.child(key).val().idade;

                        list.push({ key, nome, idade });     
                    });

                    return () => listener()

                });
                setLoad(false);
            }
        }
        loadList();
    }, []);

    if(load){
        return <ActivityIndicator size='large' color='#CCC'/>
    }else{
        return (
            <View>    
                <FlatList
                    data={list}
                    renderItem={({item})=><Text>{item.nome}</Text>}
                /> 
            </View>
        );
    }
}

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...