reactjs - 如何使用 ReactJs 和 Hooks 对 Cloud FireStore 数据进行分页
问题描述
以下代码连接到 Cloud FireStore 集合,并使用setCards挂钩将所有数据保存在名为卡片的数组中。接下来,它映射到卡片数组并将它们全部显示在一个页面上:
import React, { useState, useEffect } from 'react';
import { db } from '../firebase';
const FlipCard = () => {
const [cards, setCards] = useState([]);
useEffect(() => {
const fetchData = async () => {
const data = await db
.collection('FlashCards')
.orderBy('customId', 'asc')
.get();
setCards(data.docs.map((doc) => ({ ...doc.data(), id: doc.id })));
};
fetchData();
}, []);
return (
<div className='scene'>
{cards.map((card) => (
<div key={card.id}>
<div>
{card.originalText}
</div>
<div>
{card.translatedText}
</div>
</div>
))}
</div>
);
};
export default FlipCard;
为了给代码添加分页,我试过这个:
import React, { useState, useEffect } from 'react';
import { db } from '../firebase';
const FlipCard = () => {
const [cards, setCards] = useState([]);
useEffect(() => {
const fetchData = async () => {
const data = await db
.collection('FlashCards')
.orderBy('customId', 'asc')
.limit(1)
.get();
setCards(data.docs.map((doc) => ({ ...doc.data(), id: doc.id })));
};
fetchData();
}, []);
const showNext = ({ card }) => {
const fetchNextData = async () => {
const data = await db
.collection('FlashCards')
.orderBy('customId', 'asc')
.limit(1)
.startAfter(card.customId)
.get();
setCards(data.docs.map((doc) => ({ ...doc.data(), id: doc.id })));
};
fetchNextData();
};
return (
<>
<div className='scene'>
{cards.map((card) => (
<div key={card.id}>
<div>
{<img src={card.imgURL} alt='' />}
{card.originalText}
</div>
<div>
{card.translatedText}
</div>
</div>
))}
</div>
<button onClick={showNext}>Next</button>
</>
);
};
export default FlipCard;
但是 React 抱怨说:
未处理的拒绝(TypeError):无法读取未定义的属性“customId”
我的做法对吗?我该如何解决?
解决方案
您收到了这个未定义的错误,因为您没有在 onClick 处理程序中传递卡片对象。
实际上,您通过执行 this将合成事件传递给您的函数。showNext
<button onClick={showNext}>Next</button>
要实际传递您的卡片对象,您必须像这样调用您的函数:
<button onClick={() => showNext({card: cards[cards.length - 1]})}>Next</button>
至于您对您的实施细节发表评论的请求,我会将其放在评论中,因为这是一种意见(意味着在某些情况下它可能是错误的)
推荐阅读
- reactjs - API调用数据库后上下文不更新
- r - 像 RStudio 一样缩进 VSCode
- python - 无法在另一个 python 文件中获取一个 python 文件的全局变量值
- json - 如何在 amcharts v4 中通过 json config 手动设置 LineSeries 的颜色?
- python - 如何使用python检索Pulumi资源的属性a?
- r - glmnet 变量重要性 | `vip` 与 `varImp`
- unity3d - 仍然可以安装 hololens 第一代模拟器吗?
- javascript - 使用 console.log 在画布中进行 javascript 故障排除
- c - 斐波那契函数与 C
- kotlin-multiplatform - 如何将 c++ 代码导入 commonMain(Kotlin/多平台项目)