React

[React] UseNavigate

wwxs 2024. 9. 6. 17:41

UseNavigate

  • React Router에서 제공하는 Hook
  • 사용자를 다른 페이지로 이동시킬 때 사용

 

Link와 컴포넌트 차이

  • 이벤트 핸들러나 비동기 작업 내에서의 특정 경로 이동이 가능
더보기
더보기
export default function UseNavigate01() {
  //# useNaivgate() 사용 방법
  const navigate = useNavigate();
  // >> '네비게이트' 라는 이름으로 호출
  // >> 원하는 경로를 문자열 인수로 전달하여 이동

  //? useNavigate 훅의 옵션
  // - state 옵션
  // : 네비게이션(경로)과 함께 상태 전달이 가능
  // >> 해당 상태는 useLocation을 통해 접근 가능

  //? 조건부 네비게이션
  // >> 조건에 따른 페이지 전환

  const goToParentPage = () => {
    console.log('버튼이 클릭됨');

    //? 경로 지정 시 / 여부의 유무의 차이
    // 1) / 작성 ("/parent")
    // : 메인 경로 + /경로
    // >> localhost:3000/parent

    // 2) / 미작성 ("parent")
    // : 현재 경로 + /경로
    // >> localhost:3000/RouterHook/parent
    navigate('/parent', {state: { userId: 12345 }});
  }

  const goToHomePage = () => {
    console.log('홈페이지로 이동');
    navigate('/');
  }

  const goToPrevPage = () => {
    navigate(-1);
  }
  
  // 임의의 버튼 클릭 시 b_hooks의 index.tsx로 이동
  // >> 이동 시 { username: '홍동현' } 전달
  
  // b_hooks의 index.tsx에서 전달된 값을 받아
  // : 화면에 '홍동현' 출력
  const goToHooksPage = () => {
    navigate('/hooks', {state: { username: '홍동현'}});
  }
  
    // 인증이 필요한 페이지로 이동하려고 하는 경우
    // >> 마이페이지, 리뷰 작성, 주문 조회 등

    // + 로그인되어 있지 않으면 로그인 페이지로 이동
    
  const isAuthenticated = true;
  
  // 인증된 사용자만 홈화면으로 이동 가능
  const handleSignUp = () => {
    if(isAuthenticated){
      navigate('/');
    }
  }

  useEffect(() => {
    if(!isAuthenticated){
      navigate('/login')
    }
  }, [isAuthenticated, navigate])

  return (
    <div>
      <p>UseNavigate01 페이지 입니다.</p>
      <button onClick={goToParentPage}>parent 페이지로 이동합니다</button>
      <button onClick={goToHomePage}>Home 페이지로 이동합니다</button>
      <button onClick={goToPrevPage}>이전 페이지로 이동합니다</button>

      <button onClick={goToHooksPage}>Hooks 페이지로 이동합니다</button>
      <button onClick={handleSignUp}>회원가입</button>
    </div>
  )
}

'React' 카테고리의 다른 글

[React] Axios  (0) 2024.09.06
[React] Router  (0) 2024.09.06
[React] Hooks - customHook  (0) 2024.09.06
[React] Hooks - useReducer  (0) 2024.09.06
[React] Hooks - useCallback + useMemo  (0) 2024.09.06