我有一个自定义钩子:
x0>2.5
当我使用它时,应该只是从 import React, { useState, useEffect } from 'react';
import firebase from "../../firebase";
export default function useCurrentUserDetails() {
const uid = firebase.auth().currentUser?.uid;
const [data, setData] = useState(null);
useEffect(() => {
if (!uid) {
setData(null);
return;
}
const unsubscribe = firebase.firestore().collection("users").doc(uid).onSnapshot((snapshot) => {
if (snapshot.exists) {
setData(snapshot.data());
} else {
setData(null);
}
})
return unsubscribe;
}, [uid]);
const updateCurrentUserData = (newData) => firebase.firestore().collection("users").doc(uid).set(newData);
return [data, updateCurrentUserData];
}
获取用户,我应该能够使用数据。我是这样使用它的:
firebase
当屏幕第一次加载时,function HomeScreen({navigation}) {
const [currentUserDetails, setCurrentUserDetails] = useCurrentUserDetails();
const [username, setUsername] = useState("")
useEffect(() => {
setUsername(currentUserDetails?.name);
}, [currentUserDetails]);
return (
<Screen style={styles.screen}>
<View>
<Text>Hello</Text>
<Text style={styles.nameText}>{username}</Text>
</View>
</Screen>
)
}
不会显示,但可以说我更改为:
username
并刷新应用,<Text style={styles.nameText}>{name}</Text>
会显示。现在如果我把它改回 name
:
username
它有效。
它只是在我打开屏幕时不显示,我需要刷新变量才能使其工作。
答案 0 :(得分:0)
您的 useEffect 正在使用 currentUserDetails 的值,但您没有将其作为依赖项传递给钩子:
useEffect(() => {
setUsername(currentUserDetails?.name);
}, [currentUserDetails]);
答案 1 :(得分:-1)
如果您尝试在组件挂载时更新状态,请尝试以下操作:
useEffect(() => {
if (!uid) {
setData(null);
return;
}[])