const handleResult = useCallback(
throttle(() => {
const dataAnswer = JSON.stringify(wrongAnswer);
handleUpsertScore();
insertResult({ userId: data?.id, answer: dataAnswer, game: 'speaking', weekNumber: weekNumber });
localStorage.setItem('speakingResult', dataAnswer);
}, 2000),
[handleUpsertScore, insertResult],
);
해당 코드를 이용하여 작업을 진행햇지만 몇가지 오류가 발생하였다
첫번째 문제를 확인하는데 있어 import를 제대로 적용하니 '모듈 lodash에 대한 선언 파일을 찾을 수 없습니다' 또 다른 현상이 발생하였다
-> 구글링을 통하여 확인하니 typescript에서 lodash를 사용하려면 해당 타입 선언을 다른 곳에서 찾아야 한다고 했다 그래서 공식문서에 들어가 @type/lodash를 찾아서 설치하여 해결하였다
두번째 현상에서 위에 코드에서 useCallback을 사용하였는데 거기서 사용하는 의존성 배열 부분인 handleUpsertScore함수에서 렌더링이 일어날때마다 다른 메모리에 다시 재설성 되어서 함수가 바뀌었다 인식을하고 계속 실행되었던 현상이였다 그래서 함수를 제거하고 다시 실행하여 보니 잘 작동하는 모습을 볼 수 있었다.
단순히 동작을 하지 않아 throttle함수를 잘못 사용하고 있는줄 알았지만 하나하나 주석처리하면서 동작을 해보니 잘 작동하는걸 볼 수 있었고 오류를 잡을 수 있었다 이러한 오류 하나하나에 많은걸 배우는거 같다
지금 생각해보면 당연한 결과지만 작업을 할때만 해도 Zustand로 관리하면 더 편할거 같았고 새로고침 관련해서는 생각을 못해봐서 Zustand로 했었는데 막상 작업을 하고나서 새로고침을 했더니 데이터가 없어져서 팝업이 빈 화면으로 나온 현상이 있었다. 이러한 현상을 위해 여러가지 생각을 해보았다
위 방법중 2번을 택하였는데 그 이유는 1번을 사용할 경우 데이터 통신을 해야한다는 점과 마지막에 끝난 데이터를 보여줘야 한다는게 걸려서 2번을 택하였다 로컬스토리지에 담는게 더 편했지만 너무 로컬스토리지에 담는게 많아 지는거 같아서 걱정을 했지만 검색을 통해 문제가 없을거 같아서 안심했다.