【发布时间】:2021-04-04 17:35:46
【问题描述】:
我的问题很简单。我有一个 firebase 实时数据库,我正在从数据库中获取数据并尝试插入到 useState 中,这样我就可以在我的应用程序中显示这些数据。但无论我做什么,数据总是未定义或为空。奇怪的是,如果我在 jsx 组件中插入相同的确切数据或控制台记录它,它会毫无问题地显示。
这是我正在做的事情以及问题的描述:
首先是我的实时用户数据库
我只想访问 fullname 属性并将其插入到我的“名称”状态中
App.js
const userid = firebase.auth().currentUser.uid
const [usersList , setUsersList ] = useState([])
const [name, setName] = useState(usersList.fullname) //undefined
useEffect(() => {
const usersRef = firebase.database().ref('Users')
let query = usersRef.orderByChild('uid').equalTo(userid);
query.on('value', (snapshot) => {
const users = snapshot.val()
const usersList = []
for (let id in users) {
usersList.push({id, ...users[id]})
}
setUsersList(usersList[0])
})
},[])
显示数据:
console.log(usersList.fullname) //displays my name perfectly well
和
return (
<div>{usersList.fullname}</div>
)
显示效果也很好
但是
const [name, setName] = useState(usersList.fullname) //undefined
这对我来说似乎完全不合逻辑! 如果您对为什么会发生这种情况有任何见解,请与我分享。
【问题讨论】:
-
当你把你需要的东西放在第一个状态挂钩时,你为什么要第二次调用
useState?你不想继续使用usersList吗?我也不清楚为什么要将单个对象值设置为称为“列表”的东西。usersList最初只包含一个列表。之后,它只包含一个对象值。 -
它与这个问题无关。我们可以稍后讨论反应最佳实践,但根据我的逻辑 - 一切都按预期工作,除了在 useState 中显示它。你不同意吗?
-
在一般意义上,代码是人类与其他人交流计算机应该做什么的一种方式。当这种通信中断并且变得难以辨别意图时,实际讨论计算机实际应该做什么也变得困难。
标签: reactjs firebase firebase-realtime-database react-hooks