除非我刷新,否则 useEffect 不会更新

时间:2021-02-10 19:45:32

标签: react-native use-effect

我有一个自定义钩子:

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

它有效。

它只是在我打开屏幕时不显示,我需要刷新变量才能使其工作。

2 个答案:

答案 0 :(得分:0)

您的 useEffect 正在使用 currentUserDetails 的值,但您没有将其作为依赖项传递给钩子:

 useEffect(() => {
        setUsername(currentUserDetails?.name);
    }, [currentUserDetails]);

答案 1 :(得分:-1)

如果您尝试在组件挂载时更新状态,请尝试以下操作:

useEffect(() => {
        if (!uid) {
            setData(null);
            return;
        }[])