[英]React: React-Firebase-Hooks not getting value
I am using this package React-Firebase-Hooks but I am not very sure how to properly use it.我正在使用这个 package React-Firebase-Hooks但我不太确定如何正确使用它。
In my code below, user.data().username
is shown correctly but after putting it in useState
, the username is not shown.在我下面的代码中,
user.data().username
显示正确,但将其放入useState
后,用户名未显示。 What was not done correctly here?这里没有正确完成什么?
const [user, loading, error] = useDocument(
firebase.firestore().collection("users").doc(uid),
{
snapshotListenOptions: { includeMetadataChanges: true },
}
);
const [username, setUsername] = useState(user && user.data().username);
return (
<div className="flex">
<div className="w-1/2">
{user && (
<div className="p-8">
<div>{user.data().username}</div>
<div>{username}</div>
</div>
)}
</div>
<div className="w-1/2">Box 2</div>
</div>
);
The reason you are not getting the value on state because when the useState
is initialized, user
doesn't has a value, it's still loading.您没有在 state 上获得值的原因是因为初始化
useState
时, user
没有值,它仍在加载。 Since state is initialized only once, when the data from firebase loads, state doesn't changes.由于 state 仅初始化一次,因此当来自 firebase 的数据加载时,state 不会更改。
You need to use a useEffect hook to watch for change in user, and setUsername
then.您需要使用
setUsername
挂钩来观察用户的变化,然后设置用户名。
const [user, loading, error] = useDocument(
firebase.firestore().collection("users").doc(uid),
{
snapshotListenOptions: { includeMetadataChanges: true },
}
);
const [username, setUsername] = useState('');
useEffect(() => {
if (user) {
setUsername(user.data().username);
}
}, [user])
return (
<div className="flex">
<div className="w-1/2">
{user && (
<div className="p-8">
<div>{user.data().username}</div>
<div>{username}</div>
</div>
)}
</div>
<div className="w-1/2">Box 2</div>
</div>
);
This should work, if you face any issues, leave a comment.这应该有效,如果您遇到任何问题,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.