card-flip 카드 뒤집어지는 효과
'use client';
import React, { useState } from 'react';
import ReactCardFlip from 'react-card-flip';
import { useRouter } from 'next/navigation';
import Image from 'next/image';
import { Tour } from '../../types/flipCardType';
const CardCom = ({ tour }: { tour: Tour }) => {
const [isFlipped, setIsFlipped] = useState(false);
const router = useRouter();
const handleMouseEnter = () => setIsFlipped(true);
const handleMouseLeave = () => setIsFlipped(false);
const handleClick = (e: React.MouseEvent) => {
e.preventDefault();
router.push(`/details/${tour.id}`); // 특정 투어의 ID로 이동
};
return (
<div className='w-[300px] h-[300px] m-2 '>
<ReactCardFlip isFlipped={isFlipped} flipDirection='horizontal'>
<div
// className='text-center border w-72 h-48 p-4 m-2'
className=' w-[300px] h-[300px] text-center border p-4 '
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<p>{tour.planets.name}</p>
<Image
src={tour.planets.planet_img}
alt={tour.planets.name}
width={100}
height={100}
className='w-full h-24 object-cover'
/>
<button onClick={handleClick} className='mt-4'>
Click to flip
</button>
</div>
<div
// className='text-center border w-72 h-48 p-4 m-2'
className='w-[300px] h-[300px] text-center border p-4 '
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<p>{tour.description}</p>
<p>Price: {tour.price}</p>
<button onClick={handleClick} className='mt-4'>
Click to flip
</button>
</div>
</ReactCardFlip>
</div>
);
};
export default CardCom;
'use client';
import { createClient } from '@/supabase/client';
import { useEffect, useState } from 'react';
import CardCom from './CardCom';
interface Tour {
id: string;
price: number;
description: string;
}
const CardFlip = () => {
const [tours, setTours] = useState<Tour[]>([]);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const fetchTours = async () => {
const supabase = createClient();
const { data: tours, error } = await supabase.from('tours').select(`
id,
price,
description,
planets (
name,
planet_img
)
`);
if (error) {
console.error('Error fetching tours:', error.message, error.details);
setError(error.message);
} else {
setTours(tours);
}
};
fetchTours();
}, []);
if (error) {
return <div>Error loading tours: {error}</div>;
}
return (
<div className='flex justify-center items-center mt-[5%] flex-wrap'>
{tours.map((tour) => (
<CardCom key={tour.id} tour={tour} />
))}
</div>
);
};
export default CardFlip;
'TIL' 카테고리의 다른 글
24. 08. 12 TIL (0) | 2024.08.12 |
---|---|
24. 08. 09 TIL (0) | 2024.08.09 |
24. 08. 07 TIL (0) | 2024.08.07 |
퍼널 패턴 정리 (0) | 2024.08.06 |
CORS 정리 (0) | 2024.08.05 |