function Memo({ item, Delete, Edit, SetPosition, SetWidthHeight }) {
  const handleRef = useRef(null);

  return (
    <Draggable handleRef={handleRef} x={0} y={0} onMove={(x,y) => console.log(x,y)}>
    <div
      className="memo-container"
      style={{ width: `${250}px`, height: `${300}px` }}
    >
      <div className="menu">
        <DragHandleIcon 
          ref={handleRef}
          sx={{ cursor: "move", fontSize: "25px" }} />
        <CloseIcon
          sx={{ cursor: "pointer", fontSize: "25px", float: "right" }}
        />
      </div>
      <textarea
        className="memo-text-area"
        defaultValue={"Enter memo here"}
        name="txt"
        placeholder="Enter memo here"
      ></textarea>
    </div>
    </Draggable>
  );
}

 

위와 같이 Draggable 커스텀 컴포넌트를 사용하는데 아래와 같은 오류가 발생했다.

 

오류의 원인은 3가지 정도가 있다고 한다.

 

  • react, renderer 버전
    • react-dom 버전이 16.8.0 이하인 경우 발생할 수 있으나 현재 사용하고 있는 버전이 18.1.0 이기 때문에 해당되지 않음
  • Hooks 규칙 위반
    • 컴포넌트 내에서 훅 함수를 사용했기 때문에 문제 없어보인다.
  • 동일 앱에 1개 이상의 리액트 
    • 즉 오류의 원인은 여기인 듯 함. 자세히 살펴보자

 

Draggable 컴포넌트를 사용하기 위해 다운받았던 @billy-fe/draggable@1.0.2 패키지에서 react 버전 17.0.2에 종속되어 있는 것을 확인할 수 있다. 필자는 현재 18.1.0을 사용하고 있는데, 일부 패키지에서 17.0.2에 종속되어 있기 때문에 이러한 오류가 발생한 듯 하다.

 

 

해당 라이브러리 폴더(@billy-fe/draggable)로 이동 후 npm link를 이용해서 해결

npm link는 아직 잘 모르지만, 해당 라이브러리의 리액트를 프로젝트의 리액트로 연결하는 기능 같음.

 

 

npm link C:\workspace/sticker-memo/node_modules/react

 

 

참고

https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react

 

+ Recent posts