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 :)