useEffect 안의 ClearInterval()실행 관련 질문
407
작성한 질문수 10
안녕하세요. 먼저 좋은 강의 감사드립니다.
아래에서 useEffect() 안에서 받은 setInterval()의 retrun 값으로 받은 intervalId는 함수 Scope를 벗어나면 없어지는데, 다음에 들어온 상태에서
... else if(!isError && intervalId) clearInterval(intervalId)...
위 부분이 정상적으로 동작할 수 있나요?
함수 Scope에 상관없이 메모리가 존재하려면 useRef나 다른 방법을 사용하여 intervalid 변수가 살아 있도록 해야하지 않나요?

답변 1
0
앗 지적 감사합니다!
말씀하신대로 스코프 문제가 있기 때문에 이 경우에는 다음과 같이 useRef를 이용하는게 좋아보입니다.
import React, { useState, useEffect } from "react";
import { useRef } from "react";
const Image = ({ imageUrl }) => {
const [isError, setIsError] = useState(false);
const [hashedUrl, setHashedUrl] = useState(imageUrl);
const intervalIdRef = useRef();
useEffect(() => {
if (isError && !intervalIdRef.current) {
intervalIdRef.current = setInterval(
() => setHashedUrl(`${imageUrl}#${Date.now()}`),
1000
);
} else if (!isError && intervalIdRef.current)
clearInterval(intervalIdRef.current);
else setHashedUrl(imageUrl);
return () => clearInterval(intervalIdRef.current);
}, [isError, setHashedUrl, imageUrl]);
return (
<img
alt=""
onError={() => setIsError(true)}
onLoad={() => setIsError(false)}
style={{ display: isError ? "none" : "block" }}
src={hashedUrl}
/>
);
};
export default Image;
Router.use 두번째 파라미터 ImageRouter : undefined 전달 오류
0
128
2
소스코드 요청
0
165
1
프록시 관련 질문
0
170
1
Presigned URL 사용시 데이터베이스 저장 시점
0
338
1
이미지 등록시 자동 등록 오류
0
222
1
강의에 사용된 코드 다운 받는 사이트 주소 있나요?
0
393
2
axios 이용해서 백엔드로 이미지 전송 중 새로고침
0
477
1
ImageList 컴포넌트에서 업로드 한 사진을 리스트에서 바로 보기 위해 이 방법도 괜찮나요??
0
386
1
이미지 처음 올릴 때만 나타나는 오류
0
258
1
es6 스타일로 Import 할때 동작하지 않습니다.
0
394
1
이미지 업로드시
0
368
1
node js를 이용하고 mysql에 이미지 경로 저장
2
1263
1
선생님 cloudFront를 사용하게되면 S3는 private으로 사용하는게 좋을까요
0
546
1
선생님 aws-sdk 모듈을 찾을 수 없다고 합니다.
0
668
1
new aws.S3 version 확인
2
509
1
react-router-dom v6 useHistory 이슈
7
641
0
람다에서 시간 초과 에러가 뜹니다!
0
320
1
첫 로드시 동일한 이미지 두번호출
2
497
1
이미지 업로드 시 배열로
2
532
1
Promise.all에 대한 질문
0
431
1
세션에 관한 질문이 있습니다.
0
436
1
Promise.all관련 질문 ("여러 이미지 미리보기" 중...)
0
314
1
cdn 주소
0
513
1
특정 user 페이지 가져오기 질문있습니다.
0
299
1





