const navigate = useNavigate();
<button onClick={navigate("/signup")}>회원가입 하러 가기</button>
평소와 같이 코드를 작성하였는데 왜인지 버튼을 아무리 눌러도 회원가입 창으로 이동하지 않음을 발견하였다.
그래서 콘솔을 열어보니 버튼을 누를 때마다 아래와 같은 경고문이 발생하고 있었다.
"You should call navigate() in a React.useEffect(), not when your component is first rendered."
찾아 보니 이런 경우에는 onClick 내부에서 useNavigate 를 바로 호출하여 사용하지 않고, 함수를 onClick 내부에서 호출시켜 작동하게 만들거나, onClick 내부에 화살표 함수를 넣고, 실행부에 navigate를 적용시키면 되는 것 같았다.
직독직해하면 useEffect 내부에 useNavigate를 호출하라는 경고문이기에, useEffect내부에서 useNavigate를 호출해도 물론 해결은 되지만, 현재는 랜더링 여부에 따라 navigate가 되길 원하는 상황이라기보다는, 버튼을 클릭했을 시에만 다른 곳으로 이동이 되게 하려는 목적으로 useNavigate를 사용하는 상황이기에 이는 적절한 방법이 아니라고 생각하였다. 결론적으로 아래의 방법으로 코드를 수정했더니 더 이상 경고창이 뜨지 않고 버튼 클릭 시 useNavigate가 정상적으로 작동이 되었다.
<button onClick={() => navigate("/signup")}>회원가입 하러 가기</button>
(물론 위에서 언급했듯이 onClick 내부에서 navigate("/signup")의 동작을 하게 만드는 핸들러 함수를 호출해도 된다!)
오늘도 잘 해냈다!
'TIL' 카테고리의 다른 글
230824) typeof number인 '0'의 결과값이 NaN으로 뜨는 현상 (0) | 2023.08.24 |
---|---|
230823) input type="file"로 사용 시 특정 형식 파일만 업로드 할 수 있게 하는 방법 (0) | 2023.08.23 |
230821) React 환경에서 useState의 값에 따라 button disabled 활성화/비활성화 하기 (0) | 2023.08.21 |
230818) Firebase Auth로 유저를 관리할 때 auth 에서 제공하는 정보 외 다른 정보 넣기 (0) | 2023.08.18 |
230817) <textarea>태그의 readonly 기능과 <input>의 여러 기능 (0) | 2023.08.17 |