개발자

react에서 로그인 성공 시 새로고침 없이 메인 페이지 렌더링하는 방법?

2023년 02월 26일조회 2,702

제곧내입니다. react에서 로그인 버튼 클릭해서 로그인 성공하면 새로고침 없이 메인 페이지를 렌더링하는 방법이 있을까요?? + 수정 내용 추가했어요! 정확히는 페이지 좌측에 로그인을 id, password를 입력하는 input이 form 형태로 있고 로그인 버튼을 누르게 되면 페이지가 새로 고침됩니다. 하지만, 제가 원하는건 새로 고침 없이 우측에 있는 내용만 바뀌면 되는거라서요. 혹시 모르니 코드도 일부 첨부하겠습니다. ++ 수정 event.preventDefault()로 새로고침은 막았어요! 근데 여전히 페이지 컴포넌트들이 리렌더링 되는것 같아요 ㅠㅠ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 5

오원종(Owen)님의 프로필 사진

코드를 보면서 질문을 주시면 좀 더 이해가 빠를 것 같습니다. 우선 질문만 들었을 때 드는 생각은, 로그인을 포함하는 영역 컴포넌트에서 로그인 성공 후 리렌더링을 시켜주면 될 것 같아요. 전체 페이지에 영향을 주지 않고 해당 상태가 영향받는 컴포넌트에서만 렌더링이 일어나게 만들어 볼 수 있을 것 같습니다.

kevin님의 프로필 사진

kevin

디지털그지2023년 02월 26일

로그인할때 새로고침이 왜일어날까요? 부터 생각을 해보눈것이 좋을것같습니다

profile picture

익명

작성자

2023년 02월 28일

답변 감사합니다! 질문 수정했습니다. 로그인 버튼 클릭 시 새로고침을 막고, 전체 페이지에 영향을 주지 않도록 시도해보겠습니다

영천님의 프로필 사진

form을 쓰지않거나 submit할때 event.preventDefault 를 넣어주면 새로고침을 방지할수 있는 것으로 알고있습니다

profile picture

익명

작성자

2023년 02월 28일

오 새로고침은 말씀해주신 방법으로 막았어요. 감사합니다!

kevin님의 프로필 사진

왜 새로고침이 일어나는지부터 생각해보는게 좋을것같습니다. 제가 만약 질문을 한다면 로그인할때 폼 서브밋이되면서 화면 전환이 일어났고 그것을 하지않게하려면 어떻게 해야됩니까라고 물어봤을고같네요 그리고 만약 그렇다면 ajax나 axios등의 비동기 요청을 통해서 해결 할수있다 라고 답을 할것 같습니다.

profile picture

익명

작성자

2023년 02월 28일

답변 감사합니다. 비동기 요청하는 방법도 있군요! 화면 전환이 혹시 페이지 이동을 말씀하신건가요? 페이지 이동은 아니고 로그인을 했던 페이지가 새로 고침되는 현상이었습니다. event.preventDefault()로 해결했어요.

손정현님의 프로필 사진

안녕하세요! 원하시는게 로그인 상호작용 후 페이지의 일부만 렌더링하는 것인가요? 로그인은 어떻게 구현되어 있나요? 만약 form을 submit하는 형태로 로그인이 구현되어 있다면 submit의 기본 동작을 조작해줘야할 것 같아요. 원치 않는 컴포넌트의 리렌더링이 문제라면 상태를 관리하는 방향으로 찾아보시면 좋을 것 같아요. 무엇보다 예시 코드를 제공해주시면 더 명확한 답변이 가능할 것 같습니다 :)

profile picture

익명

작성자

2023년 02월 28일

맞아요! 상호작용하고나서 페이지 일부만 다시 렌더링하는거에요. 코드 첨부했어요. 새로고침은 막았는데, 여전히 페이지의 컴포넌트들이 리렌더링 되고 있더라구요 ㅠㅠ

손정현님의 프로필 사진

손정현

엔지니어2023년 02월 28일

혹시 MainPage에 userId, password를 useState 같은 상태 값으로 관리하고 있나요? ex) 1. MainPage 어딘가에 const [userId, setUserId] = useState() 같은 코드가 있나요? 만약 그렇다면 해당 상태 값이 변경될때 MainPage가 리렌더링 되기 때문에 하위 컴포넌트들도 리렌더링 될거에요. 해당 상태가 변경 됐을때 리렌더링 될 필요가 없는 하위 컴포넌트들에게 영향이 없도록 하셔야합니다. 이걸 구현하는 방법은 여러가지 일 것 같아요. 상태 값을 useRef로 바꿔줄수도 있고, 하위 컴포넌트에 memoization 기법 중 하나를 적용 시켜도 될 것 같고요. 상태 값일 필요가 없다면 useState을 굳이 안써도 되긴합니다 :) 공식문서 한번 참고하시면 좋을것 같습니다! - https://beta.reactjs.org/learn/managing-state - https://beta.reactjs.org/reference/react/memo - https://beta.reactjs.org/reference/react/useMemo - https://beta.reactjs.org/reference/react/useRef

profile picture

익명

작성자

2023년 02월 28일

아하, 그렇군요! 공식문서 참고해서 한번 수정해보겠습니다. 감사합니다

커리어리 AI 봇님의 프로필 사진

새로고침 없이 페이지를 다시 렌더링하려면, 리액트에서 제공하는 라우팅 기능을 이용하면 됩니다. 라우팅이란, 페이지 URL을 변경하면 해당 URL에 맞는 컴포넌트를 렌더링하는 것을 의미합니다. 먼저, ' react-router-dom '라이브러리를 설치해야 합니다. 설치한 후, ' BrowserRouter '컴포넌트를 사용하여 앱의 라우팅을 설정할 수 있습니다. 예를 들어, 로그인 후 메인 페이지로 이동하려면 다음과 같이 코드를 작성할 수 있습니다. 아래 코드에서 ' isLoggedIn ' 상태 값이 ' true '이면 ' MainPage ' 컴포넌트를 렌더링하고, ' false '이면 로그인 페이지로 리다이렉트합니다. ' MainPage ' 컴포넌트는 로그인한 사용자만 접근할 수 있는 페이지이므로, 로그인 상태를 확인해야 합니다. 이렇게 하면, 로그인 성공 후 새로고침 없이 메인 페이지를 렌더링할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom';

function App() {
  const [isLoggedIn, setIsLoggedIn] = useState(false);

  const handleLogin = (event) => {
    event.preventDefault();
    // 로그인 요청 보내기
    setIsLoggedIn(true);
  };

  return (
    <Router>
      <Switch>
        <Route exact path="/">
          {isLoggedIn ? <MainPage /> : <Redirect to="/login" />}
        </Route>
        <Route path="/login">
          <Login onSubmit={handleLogin} />
        </Route>
      </Switch>
    </Router>
  );
}

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!