<util/iconGenerator.js>
import * as icon from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
// 아이콘 컴포넌트를 반환
export const retunIcon = (iconName, size = '1x', color = 'white') => {
return <FontAwesomeIcon style={{ color }} icon={icon[iconName]} size={size} color="white" />;
};
useRef
로 여러 개의 값을 관리하는 것.new IntersectionObserver()
의 observe()
메서드는useRef()
를 할당한 변수의 current 값으로 할당한다.const observeSection = () => {
// observe() 메서드에 ref 속성을 가진 요소를 전달
observer.observe(observeTarget.current)
};
// useRef를 하나 생성
const observeTarget = useRef();
// observe 할 대상이 화면에 나타나면 적용되는 코드
const observer = new IntersectionObserver((e) => {
e.forEach((el) => {
if (el.isIntersecting) el.target.style.animationPlayState = "running";
});
});
// 관찰 할 대상을 등록하는 함수
const observeSection = () => {
observer.observe(observeTarget.current)
};
// 컴포넌트가 mount 시 observer에 타겟을 전달한다
useEffect(() => {
observeSection();
}, []);
// UI
<HireTextUl ref={observeTarget}>
{listUI}
</HireTextUl>
위와 같이 하다보니 문제가 생겼다
애니메이션을 주고 싶은 대상이 많을 때
useRef가 5-6개가 되어버린 것이다..
useRef를 하나만 사용할 때는
자세한 작동원리를 모르고 사용했는데
오늘 useRef의 생김새를 뜯어보게 됐다.
const test = useRef([]);
console.log(test); // {current: Array(0)}
이렇게 되면 test.current
는 배열이란 거구나~ 하고 깨달았다.
(el) => (observeTarget.current[1] = el)
요런 callback 함수가 있는데 <HireTextUl ref={(el) => (observeTarget.current[1] = el)}>
{listUI}
</HireTextUl>
<ButtonBox ref={(el) => (observeTarget.current[2] = el)}></ButtonBox>
// 생략
<HireTextUl ref={(el) => (observeTarget.current[1] = el)}>
{listUI}
</HireTextUl>
<ButtonBox ref={(el) => (observeTarget.current[2] = el)}>
<Button
width={160}
height={60}
isBackground={true}
text={"Hire a trainer"}
/>
<Button width={160} height={60} text={"Talk in person"} />
</ButtonBox>
<ImageBox ref={(el) => (observeTarget.current[3] = el)}>
<ImageEl src={"trainer"} />
</ImageBox>
const observeElement = () => {
observeTarget.current.forEach((el) => {
observer.observe(el);
});
};