728x90
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
❓상황
Next.js <Link> 태그에 <a>태그를 넣는것 대신, 컴포넌트를 넣을때 발생하는 오류
🔎 원인 파악
Next.js의 <Link> 태그로 감싸진 <a>태그는 (onClick, onMouseEnter), ref 총 3개의 필수 속성을 갖는다.
<Link> 태그 안에 <a>태그를 넣으면, 별 문제없이 잘 동작한다.
<Link href="/auth/signup">
<a>회원가입</a>
</Link>
그러나 컴포넌트를 사용할 경우, onClick, onMouseEnter, ref 속성을 갖도록 해줘야한다.
<Link href="/auth/signup">
<Button>회원가입</Button>
</Link>
그래서 아래와 같이 ...연산자를 이용하여 속성을 부여했다.
const Button = ({ children, ...rest }: any) => {
return (
<SButton {...rest}>
{children}
</SButton>
);
};
컴포넌트의 경우에는 forwardRef 함수를 이용해야만 ref 속성을 부여할 수 있다는 것을 알게되었다.
✨ 해결 방법
1. forwardRef를 이용하여 ref 속성을 부여한다. : 내가 채택한 해결 방법
const Button = forwardRef(({ children, ...rest }: any, ref: any) => {
return (
<SButton {...rest} ref={ref}>
{children}
</SButton>
);
});
2. forwardRef 함수를 이용하지 않고, 컴포넌트를 <a>태그로 감싼다.
<Link href="/auth/signup">
<a>
<Button>회원가입</Button>
</a>
</Link>
'공부 > 오류' 카테고리의 다른 글
오류 | Manifest 오류 (0) | 2022.07.25 |
---|---|
오류 | useInfiniteQuery fetch 오류 (0) | 2022.07.24 |
공부 | Git Hub 다른 사람 원격저장소 git pull (0) | 2022.07.05 |
오류 | axios interceptors(ft. react, typescript) (0) | 2022.06.30 |
오류 | map 함수 2 (feat. React) (0) | 2022.06.27 |