Removing Duplicated Styles (Refactor)
新建一个容器,把骨架屏和卡片都包住,只要修改容器的样式就好。
GameCardContainer.tsx |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | import { Box } from "@chakra-ui/react";
import { ReactNode } from "react";
interface Props {
children: ReactNode;
}
const GameCardContainer = ({ children }: Props) => {
return (
<Box width="300px" borderRadius={10} overflow="hidden">
{children}
</Box>
);
};
export default GameCardContainer;
|
删去 GameCard
和 GameCardSkeleton
中重复的样式(省略)。
在 GameGrid
中,对生成的骨架屏和卡片进行包裹。
GameGrid |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | import { Text, SimpleGrid, Skeleton } from "@chakra-ui/react";
import useGames from "../hooks/useGames";
import GameCard from "./GameCard";
import GameCardSkeleton from "./GameCardSkeleton";
import GameCardContainer from "./GameCardContainer";
const GameGrid = () => {
const { games, error, isLoading } = useGames();
const skeletons = [1, 2, 3, 4, 5, 6];
return (
<>
{error && <Text>{error}</Text>}
<SimpleGrid
columns={{ sm: 1, md: 2, lg: 3, xl: 5 }}
padding="10px"
spacing={10}
>
{isLoading &&
skeletons.map((Skeleton) => (
<GameCardContainer>
<GameCardSkeleton key={Skeleton} />
</GameCardContainer>
))}
{games.map((game) => (
<GameCardContainer>
<GameCard key={game.id} game={game} />
</GameCardContainer>
))}
</SimpleGrid>
</>
);
};
export default GameGrid;
|
2024-07-20 22:23 2024-07-21 20:08