【问题标题】:Custom hook getting undefined value then the correct object in react native?自定义钩子获得未定义的值然后反应原生的正确对象?
【发布时间】:2020-09-13 22:32:51
【问题描述】:

您好,所以我正在尝试制作一个自定义挂钩,我从数据库中获取我的用户对象并使用它,但是我的控制台日志显示该对象在对象出现后不久未定义,这会影响其他依赖它的函数,它们只捕获第一个状态并给出错误我该如何解决这是我的钩子代码:-

import { useState, useEffect } from 'react'
import { storage, auth, database } from '../api/auth';



export default function useUser() {
    const [user, setUser] = useState()
    const userId = auth.currentUser.uid;

    useEffect(() => {
        getCurrentUser();

    }, [])


    const getCurrentUser = () => {
        database.ref("users/" + userId).orderByChild('name').once("value").then(snapshot => {
            setUser(snapshot.val())
        })
    }

    return user
}

【问题讨论】:

    标签: javascript react-native react-hooks


    【解决方案1】:

    首先你可以为 userObject 分配默认值。

    const [user, setUser] = useState(null);

    在你使用 useUser 钩子的地方之后,你可以检查它是否为空。

    const user = useUser();
    
    
    if (!user) {
        return <Text>Loading...</Text>;
    }
    
    return(
        <Text>{user.name}</Text>
    );
    

    【讨论】:

    • 我做了你所说的初始化为 null 并在我的其他组件中调用了钩子,但是它给了 user = null 然后是 user=object?
    • 是的。首先,您需要获取用户。在 user=null 之前,您可以显示微调器、加载消息或返回 null。当你得到用户(user=object)时,你只是渲染。
    • 其他需要计算用户的函数怎么样,例如我有一个函数需要用户。_id 我如何让他们等待用户更新而不给我一个错误用户为空?
    • 您只需将它们包装在 useEffect 中并提供 user 作为依赖项。在运行函数之前在 useEffect 中,您可以检查用户是否为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2020-07-16
    • 2019-07-30
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多