【发布时间】:2023-03-09 14:27:01
【问题描述】:
我正在制作一个 Nextjs 抽认卡应用。我正在传递这样的甲板结构:
const deck = {
title: 'React 101',
flashcards: [flashcardOne, flashcardTwo],
};
作为Deck 组件的道具。该组件显示抽认卡中的第一张卡片和一个“下一步”按钮以增加索引并显示抽认卡中的下一张卡片。
Card 组件非常简单,根据状态front 显示卡片的正面和背面。
这是我到目前为止得到的,它正在工作,但如果我在卡片显示答案 (flashcard.back) 时单击“下一步”,下一张卡片将与答案一起出现。而且我不确定为什么,当我单击“下一步”时,Card 组件不是重新呈现吗?如果组件重新渲染,front 会被设置为 true 吗?
export default function Deck({ deck }) {
const [cardIndex, setCardIndex] = useState(0);
const { title, flashcards } = deck;
return (
<div className={styles.container}>
<main className={styles.main}>
<h1 className={styles.title}>{title}</h1>
{cardIndex < flashcards.length ? (
<>
<div className={styles.grid}>
<Card flashcard={flashcards[cardIndex]} />
</div>
<button onClick={() => setCardIndex((cardIndex) => cardIndex + 1)}>
Next
</button>
</>
) : (
<>
<div>End</div>
<button>
<Link href='/'>
<a>Go to Home</a>
</Link>
</button>
<button onClick={() => setCardIndex(0)}>Play again</button>
</>
)}
</main>
</div>
);
}
export function Card({ flashcard }) {
const [front, setFront] = useState(true);
return (
<>
{front ? (
<div
className={`${globalStyles.card} ${styles.card}`}
onClick={() => setFront(false)}
>
<p className={styles.front}>{flashcard.front}</p>
</div>
) : (
<div
className={`${globalStyles.card} ${styles.card}`}
onClick={() => setFront(true)}
>
<p className={styles.back}>{flashcard.back}</p>
</div>
)}
</>
);
}
【问题讨论】:
标签: reactjs