I'm new to React Native and struggling with some code:
import 'react-native-gesture-handler'
import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, View, Button, Image, TextInput, ActivityIndicator } from 'react-native'
import firebase from "../utils/firebase"
const SettingsScreen = () => {
const [isEditing, setIsEditing] = useState(false)
const [userDataLoaded, setUserDataLoaded] = useState(false)
const [updatedFirstName, setUpdatedFirstName] = useState("")
const user = firebase.auth().currentUser
let userData: firebase.firestore.DocumentSnapshot
firebase.firestore().doc("users/" + user?.uid).get().then(user => {
userData = user
setUserDataLoaded(true)
}).catch(error => {
console.log(error.code, error.message)
})
function onSaveChanges() {
}
return (
<View>
{userDataLoaded ? (
<>
{/* Change Editing Permission */}
< Button title={isEditing ? "Save Changes" : "Edit"} onPress={() => {
setIsEditing(!isEditing)
// save changes
if (isEditing) onSaveChanges();
}} />
{/* First Name */}
<Text>User: {userData.data()}</Text>
<TextInput
editable={isEditing}
placeholder="First Name"
onChangeText={text => setUpdatedFirstName(text)}
// value={updatedFirstName == "" ? userData?.get("firstName") : updatedFirstName}
/>
</>
) : (
<ActivityIndicator />
)}
</View>
)
}
export default SettingsScreen
I'm getting an error, because of the use of userData
in the return section. It says that the variable is used before its assigned.
My understanding is that React is rendering the section, in which userData
is being used in, only if the state userDataLoaded
is set to true
. And userDataLoaded
only is set to true
if userData
is assigned by the data loaded from the server.
What am I doing wrong? Thanks for your support :)