Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()? : 오류 해결

문지은·2023년 9월 24일
0
post-thumbnail

오류

  • 프로젝트 실행에는 문제 없었지만, 콘솔창을 확인하다가 아래 경고 문구가 떠있는 것을 발견하였다.
react-dom.development.js:86 Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

Check the render method of `MaterialTailwind.MenuList`.
    at NoticeList (http://localhost:3000/static/js/bundle.js:3180:81)
    at div
    at VisualElementHandler (http://localhost:3000/static/js/bundle.js:68075:38)
    at MotionComponent (http://localhost:3000/static/js/bundle.js:68115:20)
    at FloatingFocusManager (http://localhost:3000/static/js/bundle.js:15331:5)
    at PresenceChild (http://localhost:3000/static/js/bundle.js:74891:21)
    at AnimatePresence (http://localhost:3000/static/js/bundle.js:75010:21)
    at FloatingPortal (http://localhost:3000/static/js/bundle.js:15230:5)
    at LazyMotion (http://localhost:3000/static/js/bundle.js:75288:21)
    at http://localhost:3000/static/js/bundle.js:22542:25
    at FloatingNode (http://localhost:3000/static/js/bundle.js:14410:5)
    at MenuContextProvider (http://localhost:3000/static/js/bundle.js:21915:21)
    at http://localhost:3000/static/js/bundle.js:22014:20
    at FloatingTree (http://localhost:3000/static/js/bundle.js:14430:5)
    at http://localhost:3000/static/js/bundle.js:22706:20
    at NoticeBadge (http://localhost:3000/static/js/bundle.js:2800:82)
    at div
    at div
    at div
    at PublicNav (http://localhost:3000/static/js/bundle.js:2091:74)
    at NavBar (http://localhost:3000/static/js/bundle.js:1981:74)
    at Router (http://localhost:3000/static/js/bundle.js:116148:15)
    at BrowserRouter (http://localhost:3000/static/js/bundle.js:114249:5)
    at div
    at App
    at ThemeProvider (http://localhost:3000/static/js/bundle.js:29009:28)
  • 부모 컴포넌트에서 자식 컴포넌트의 DOM 요소를 접근할 때는 forwardRef를 사용하여 접근해야 한다는 문구이다.
  • 오류 문구에서 MaterialTailwind.MenuList 를 사용하는 과정에서 문제가 발생하였음을 알 수 있었다.
  • MaterialTailwindMenu UI를 드롭다운처럼 사용하기 위해 아래와 같이 MenuList 안에 컴포넌트를 넣었는데 그러면 안됐나보다 ^^;

해결 방법

  • 자식 컴포넌트를 forwardRef를 사용하여 생성한다.
import React, { forwardRef } from 'react';


const MyPageDrop = forwardRef(() => {
  ...
  );
});

export default MyPageDrop;
  • 부모 컴포넌트에서 ref를 생성하고 prop으로 전달한다.

function SupplierNav() {
  const MyPageRef = React.createRef();

  return (
    <div>
      ...
      <MenuList>
        <MyPageDrop ref={MyPageRef} />
      </MenuList>
      ...
  );
}

export default SupplierNav;
  • 이제 콘솔창이 깨끗해졌다 :)

References

profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글