const Experience = () => {
const { classes } = useStyles();
/* 좌표값을 담을 useState */
const [y, setY] = useState<number | undefined>();
/* 어떤 엘리먼트를 참조(ref)할 것인지 */
const experienceRef = useRef<HTMLDivElement>(null);
/* y좌표값을 가져올 함수 */
const getPosition = () => {
const y = experienceRef.current?.offsetTop;
setY(y);
};
/* 마운트될 때 함수 실행하기 */
useEffect(() => {
getPosition();
window.addEventListener("resize", getPosition);
}, []);
console.log("y", y);
const ref = useRef(null);
useEffect(() => {
import("@lottiefiles/lottie-player");
});
const itemList = expData.map((item, index) => (
<Accordion.Item value={item.title} key={index}>
<Accordion.Control>
<ExperienceItem {...item} />
</Accordion.Control>
<Accordion.Panel>
<Text size="sm">{item.content}</Text>
</Accordion.Panel>
</Accordion.Item>
));
return (
<Box className={classes.wrap} ref={experienceRef} id="experiences">
<Box className={classes.wrapExperienceTitle}>
<Title className={arsenal.className}>What I have done</Title>
<Box className={classes.wrapLottieProject}>
<lottie-player
ref={ref}
src="https://assets8.lottiefiles.com/packages/lf20_DbCYKfCXBZ.json"
background="transparent"
speed="1.5"
style={{ width: "300px", height: "300px" }}
loop
autoplay
></lottie-player>
</Box>
</Box>
<Box className={classes.wrapAccordion}>
<Accordion chevronPosition="right" variant="contained">
{itemList}
</Accordion>
</Box>
</Box>
);
};
export default Experience;
결과

| [Redux] Redux, Redux-toolkit 기본 세팅 및 count 예제 (0) | 2023.02.09 |
|---|---|
| [React] Infinite Scroll in React with React-Query (0) | 2023.02.07 |
| [React] List array item 제거하기 w/ filter (0) | 2023.01.02 |
| [React] localStorage 사용해 List 데이터 JSON으로 저장하기 (0) | 2023.01.02 |
| [React] List 에 새로운 object인 항목 추가하기 w/ useState, onClick and inputs (0) | 2022.12.29 |