reactjs - 状态未更新。我想从 Firestore 中获取数据
问题描述
我已成功从 firestore 检索数据,但无法更新我的状态。请检查代码。
export const TaskContextProvider = (props) => {
const [Tasks, setTasks] = useState([])
const { User } = useContext(AuthContext)
useEffect(() => {
firebase.firestore()
.collection("Users")
.doc(User.id)
.collection("Tasks")
.onSnapshot((snapshot) => {
const newtask = snapshot.docs.map((doc)=>({
id : doc.id,
...doc.data()
}))
setTasks(newtask)
console.log('newtask', newtask)
console.log('Tasks', Tasks)
})
}, [])
以下的控制台输出是
newtask (10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
Tasks []
解决方案
setTasks
是异步的,并且在从设置其新值的同一函数中调用时可能永远不会向您显示正确的值。相反,将其记录在外部useEffect
以查看它是否实际上正在更新。然后你会看到每个渲染的console.log。
推荐阅读
- python - 从特定行中选择特定列(Python - MySQL)
- mongoose - 常数未反映在函数中
- php - 使用 JQuery 启用和禁用下拉列表的问题
- android - 如何设置RecyclerView的长度不超过屏幕
- node.js - 带有多个 MongoDB 查询的 Express 中的异步/等待
- android - 如何防止用户数据再次输入 firebase 数据库?
- c - 我在这个片段中使用 malloc 错误吗
- c++ - 为什么这种算法的“改进”不起作用?
- php - 为什么我的 Symfony 应用程序在尝试显示页面时没有使用正确的数据库参数
- php - regex,PHP- 从复杂的 json 字符串中删除单引号、双引号和反斜杠