Следующий код подключается к коллекции Cloud FireStore и сохраняет все данные в массиве под названием cards с помощью ловушки 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 из undefined
Правильно ли мой подход? Как исправить?