Как использовать FireBase в DrawerNavigator и Syn c получения данных - PullRequest
0 голосов
/ 12 февраля 2020

Цель :

Я хочу получить пользователей name из firebase и затем использовать в Текст компонент, но он возвращается до того, как данные могут быть загружены из firebase, в результате чего текст получает undefined .

Код ящика:

export default Slidebar = (props) => {
  var name;

  firebase.database().ref('users/' + firebase.auth().currentUser.uid + '/profile').once("value")
  .then( (snapshot) => {
    name = (snapshot.val().name)
    console.log('snapshot name:', name)
  }) 

  return(
    <ScrollView style={{backgroundColor: "#121212"}}>
      <ImageBackground source={{uri: 'https://www.redebrasilatual.com.br/wp-content/uploads/2019/05/maconha-projeto.jpg'}} 
        style={{ padding: 16, paddingTop: 48 }} 
      >
        <Text style={styles.name}> { name, console.log('text name: ', name) } </Text>        
        <Text style={styles.email}>email@example.com</Text>


        <TouchableOpacity style={{height: 40, width: 40}} onPress={() => console.log(name)} >
          <View style={{flex: 1, backgroundColor: 'white'}} />
        </TouchableOpacity>

      </ImageBackground>

      <View style={styles.container}>
          <DrawerNavigatorItems {...props} />
      </View>
    </ScrollView>
  )
}

Консольный вывод:

INFO 17:06 text name: undefined INFO 17:06 snapshot name: Joao Pedro

1 Ответ

0 голосов
/ 13 февраля 2020

Решено! я уже пробовал useState раньше, но я думаю, что сделал что-то не так, но теперь это работает хорошо!

const [name, setName] = useState("teste");
  const [email, setEmail] = useState("email");

  firebase.database().ref('users/' + firebase.auth().currentUser.uid + '/profile').once("value")
  .then( (snapshot) => {
    setName(snapshot.val().name)
    setEmail(snapshot.val().email)
  }) 
...