React

useState로 인스턴스 접근

갬쿠 2023. 7. 13. 02:41

아래 코드에서 wavesurfer 엘리먼트는 useRef로 컨테이너를 지정해서 그 안에 만들어졌다. 

const wavesurferRef = useRef(null);

useEffect(() => {
    let wavesurfer = null;
    const initWaveSurfer = () => {
      wavesurfer = WaveSurfer.create({
        container: wavesurferRef.current,
        ...optins
      });
...
  }, []);
    return (
    ...
    <WaveContainer ref={wavesurferRef} />
	...
	);

이제 useEffect 바깥의 코드에서 파형에 접근해야 하는데 wavesurferRef.current에서 메서드를 호출했다가 막혔다. wavesurferRef.current.method() is not a function 이런 에러였는데 해결하고 보니 당연한 일이었다.

 

wavesurferRef.current를 콘솔에 찍어보면 div 엘리먼트가 찍힌다. 나는 div에 메서드를 호출하고 있었던 것이다...

위 코드에서 useRef는 DOM 요소에 대한 참조를 생성할 뿐이기 때문에 내가 하려던 일을 하려면 wavesurfer 인스턴스를 따로 저장해서 관리했어야 한다. 

const [waveSurferInstance, setWaveSurferInstance] = useState(null);
...
setWaveSurferInstance(wavesurfer);

useEffect에서 wavesurfer를 생성한 후 useState로 인스턴스를 저장하면 다른 곳에서도 접근할 수 있다.

728x90