Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

312
Visualizações
¿Cómo hago que una función se ejecute nuevamente si, y solo si, devuelve nulo en React Native?

Tengo un proyecto RN/Expo que, a veces, devuelve un valor nulo porque los datos simplemente no han tenido tiempo de cargarse.

Los datos provienen de un servidor de AWS.

Si actualizo la página, esto normalmente se arreglará solo, sin embargo, esta no es una solución a largo plazo.

¿Cómo puedo modificar esta función para que se ejecute nuevamente, si, y solo si, devuelve una respuesta "nula" para cualquiera de las variables?

A continuación se muestra mi código:

 const [ firstName, getFirstName ] = useState('') const [ phone, getPhone ] = useState('') const [ email, getEmail ] = useState('') const [ userPhoto, getUserPhoto ] = useState(null) useEffect(()=>{ const info_response = server_grab.get_user_info().then(response=>{ const displayName = async()=>{ getFirstName( <Text style = {styles.title}> {response.first_name} {response.last_name} </Text> ) getPhone( <Text style = {styles.box_text}> {response.phone} </Text> ) getEmail( <Text style = {styles.box_text}> {response.email} </Text> ) } ) } const displayPhoto = async () =>{ const photo_response = server_grab.download_profile_photo().then(response=>{ getUserPhoto(response.photo_data.raw_data) } ) } displayPhoto() displayName()

...

 return( <View> {userPhoto && <Avatar.Image source= {{uri:`data:image/jpg;base64,${userPhoto}`}}/>} </View> <View> <Text>{firstName}</Text> <Text>{email}</Text> <Text>{phone}</Text> </View> )
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Este es un ejemplo del concepto que podrías usar:

 import { Text, View, Image, ActivityIndicator } from 'react-native'; const simulateApiCall = (type, timeout = 1000 ) => new Promise((resolve, reject) => { setTimeout(() => { switch(type){ case "firstName": resolve('John'); break; case 'lastName': resolve('Doe'); break; case 'avatar': resolve('https://cdn1.vectorstock.com/i/1000x1000/31/95/user-sign-icon-person-symbol-human-avatar-vector-12693195.jpg'); break; } }, timeout); }); const Home = () => { const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [userAvatar, setUserAvatar] = useState(null); const [isLoading, setIsLoading] = useState(false); useEffect(() => { loadUserData(); }, [loadUserData]); const loadUserData = useCallback(async () => { setIsLoading(true); try { const userFirstName = await simulateApiCall('firstName'); const userLastName = await simulateApiCall('lastName'); setFirstName(userFirstName ?? ''); setLastName(userLastName ?? ''); setIsLoading(false); loadUserAvatar(); } catch (error) { setIsLoading(false); console.log('Error loading user data'); } }, [loadUserAvatar]); const loadUserAvatar = useCallback(async () => { try { const userAvatar = await simulateApiCall('avatar', 2000); setUserAvatar(userAvatar); } catch(error){ console.log('Error loading user avatar') } }, []); return(<View> {isLoading ? <ActivityIndicator /> : <> {userAvatar && <Text>{userAvatar}</Text>} <Text>{firstName}</Text> <Text>{lastName}</Text> </> } </View>); } export default Home;

Puedes jugar por aquí https://snack.expo.dev/@steppannws/d39758

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda