Skip to content

Commit e39cfd8

Browse files
committed
fix: useEffect double render
use isSelected directly, this causes a double render on every parent state change.
1 parent 5679afa commit e39cfd8

File tree

1 file changed

+3
-14
lines changed

1 file changed

+3
-14
lines changed

src/components/Card.tsx

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"use client";
22

3-
import { useEffect, useState } from "react";
43
import { type IPaper } from "@/interface";
54
import Image from "next/image";
65
import { Eye, Download, Check } from "lucide-react";
@@ -24,22 +23,12 @@ interface CardProps {
2423
}
2524

2625
const Card = ({ paper, onSelect, isSelected }: CardProps) => {
27-
const [checked, setChecked] = useState<boolean>(isSelected);
28-
29-
useEffect(() => {
30-
setChecked(isSelected);
31-
}, [isSelected]);
32-
3326
const handleDownload = async (paper: IPaper) => {
3427
await downloadFile(getSecureUrl(paper.file_url), generateFileName(paper));
3528
};
3629

3730
const handleCheckboxChange = () => {
38-
setChecked((prev) => {
39-
const newChecked = !prev;
40-
onSelect(paper, newChecked);
41-
return newChecked;
42-
});
31+
onSelect(paper, !isSelected);
4332
};
4433

4534
const paperLink = `/paper/${paper._id}`;
@@ -48,7 +37,7 @@ const Card = ({ paper, onSelect, isSelected }: CardProps) => {
4837
<div
4938
className={cn(
5039
"overflow-hidden rounded-sm border-2 border-[#734DFF] bg-[#FFFFFF] font-play transition-all duration-150 hover:bg-[#EFEAFF] dark:border-[#36266D] dark:bg-[#171720] hover:dark:bg-[#262635]",
51-
checked && "bg-white",
40+
isSelected && "bg-white",
5241
)}
5342
>
5443
<Link href={paperLink} target="_blank" rel="noopener noreferrer">
@@ -100,7 +89,7 @@ const Card = ({ paper, onSelect, isSelected }: CardProps) => {
10089
<div className="flex items-center justify-between gap-2 px-4 pb-4 font-play">
10190
<div className="flex items-center gap-2">
10291
<input
103-
checked={checked}
92+
checked={isSelected}
10493
onChange={handleCheckboxChange}
10594
className="h-5 w-5 accent-[#7480FF]"
10695
type="checkbox"

0 commit comments

Comments
 (0)