React Firebase startAfter() 查询未按预期工作
React Firebase startAfter() query not working as intended
我正在使用 Firebase Firestore 在 React 中进行无限分页。我有一个组件从我的 firestore 中获取有限的数据并将其附加到状态。最初,我只获取 5 条记录,然后触发相同的函数来获取上次获取的最后一条记录之后的下 5 条记录。
import './App.css';
import React,{useState,useEffect} from 'react';
import db from './firebase.config';
function App() {
const [comments,setComments]=useState([])
async function fetchData(){
let latestDoc=comments[comments.length-1];
console.log(latestDoc)
const res=db.collection('comments')
.orderBy("id")
.startAfter(latestDoc || 0)
.limit(5);
const data=await res.get();
console.log(data.docs)
let temp=[];
data.docs.forEach(item=>{
const comment=item.data();
temp.push(comment)
})
setComments([...comments,...temp])
}
useEffect(()=>{
fetchData();
},[])
const LoadMoreData=()=>{
fetchData();
}
return (
<>
<div className="container">
{
comments && comments.map(comment=>{
if(comment)
return(
<div className="card" key={comment.id}>
<h4>{comment.name}</h4>
<p>{comment.email}</p>
<p>{comment.postId}</p>
</div>
)
})
}
</div>
<div className="load">
<button onClick={LoadMoreData}>Load More</button>
</div>
</>
);
}
export default App;
当我单击“加载更多”时,最后一条记录正确存储在 latestDoc
中,但是 startAfter()
查询为我提供了一个空数组,而它不应该用于后续的提取。我的 firestore 数据不过是这个虚拟 API https://jsonplaceholder.typicode.com/comments 返回的所有评论。我做错了什么?为什么我的查询没有按预期运行?
.startAfter(latestDoc?latestDoc.id : 0)
以上更改对我有用。感谢@kunquan 指出。看起来您需要参考您在 orderBy
子句中使用的记录 属性,在我的例子中是 id
.
我正在使用 Firebase Firestore 在 React 中进行无限分页。我有一个组件从我的 firestore 中获取有限的数据并将其附加到状态。最初,我只获取 5 条记录,然后触发相同的函数来获取上次获取的最后一条记录之后的下 5 条记录。
import './App.css';
import React,{useState,useEffect} from 'react';
import db from './firebase.config';
function App() {
const [comments,setComments]=useState([])
async function fetchData(){
let latestDoc=comments[comments.length-1];
console.log(latestDoc)
const res=db.collection('comments')
.orderBy("id")
.startAfter(latestDoc || 0)
.limit(5);
const data=await res.get();
console.log(data.docs)
let temp=[];
data.docs.forEach(item=>{
const comment=item.data();
temp.push(comment)
})
setComments([...comments,...temp])
}
useEffect(()=>{
fetchData();
},[])
const LoadMoreData=()=>{
fetchData();
}
return (
<>
<div className="container">
{
comments && comments.map(comment=>{
if(comment)
return(
<div className="card" key={comment.id}>
<h4>{comment.name}</h4>
<p>{comment.email}</p>
<p>{comment.postId}</p>
</div>
)
})
}
</div>
<div className="load">
<button onClick={LoadMoreData}>Load More</button>
</div>
</>
);
}
export default App;
当我单击“加载更多”时,最后一条记录正确存储在 latestDoc
中,但是 startAfter()
查询为我提供了一个空数组,而它不应该用于后续的提取。我的 firestore 数据不过是这个虚拟 API https://jsonplaceholder.typicode.com/comments 返回的所有评论。我做错了什么?为什么我的查询没有按预期运行?
.startAfter(latestDoc?latestDoc.id : 0)
以上更改对我有用。感谢@kunquan 指出。看起来您需要参考您在 orderBy
子句中使用的记录 属性,在我的例子中是 id
.