useEffect에서 특정 target에 blur Event를 걸었는데, 적용되지않았던 경험을 적어보자
export default function Signin() {
const pwRef = useRef<HTMLInputElement>(null);
useEffect(() => {
const fn = () => {
setSignValid(undefined);
};
pwRef.current?.addEventListener("blur", fn);
return () => pwRef.current?.removeEventListener("blur", fn);
}, []);
return <InputComponent ref={pwRef} />
}
InputComponent
가 mount되기전에 이벤트가 붙기문에 이때 Ref는 null
값이다.pwRef.current
를 넣어주어 Ref가 mount된 이후에 이벤트를 붙여주면 해결된다.불필요한 return을 삭제
처리하였다.export default function Signin() {
const pwRef = useRef<HTMLInputElement>(null);
useEffect(() => {
const fn = () => {
setSignValid(undefined);
};
pwRef.current?.addEventListener("blur", fn);
return () => { // return로직 변경
pwRef.current?.removeEventListener("blur", fn);
};
}, [pwRef, pwRef.current]); //의존배열추가
return <InputComponent ref={pwRef} />
}