Dazz6/ABOUT

고마워써 프로젝트 - #2-2. 홈 화면

dazz6 2025. 1. 7. 18:00

 

고마워써 홈 화면은 사실 비로그인인 상태에서 접근할 일이 잘 없다.

특정 사용자가 공유한 고유 링크를 통해 접근하고,

그 경로에서 신청을 완료한 뒤 원하는 사용자만 추가적으로 로그인 / 회원가입을 하게끔 구현했기 때문이다.

그래서 간단하게 카카오 로그인을 할 수 있는 버튼을 추가하고,

session을 확인하여 userId 값이 존재할 경우 로그인한 상태로 간주하여

연하장 설문을 생성하는 경로로 이동하는 버튼을 출력되게 했다.

const userId = parseInt(sessionStorage.getItem("userId") || "0");

// ...

// jsx
{userId ? (
	<>
		<ButtonS category="pink" onClick={() => nav.push(`/create-form`)}>
		연하장 신청받기
		</ButtonS>
	</>
) : (
	<ImgWrapper onClick={kakaoLogin}>
		<Img src={kakao} width="50%" alt="Kakao Login" />
	</ImgWrapper>
)}

간단하게 삼항연산자를 사용한 출력을 사용했다.

 

그리고 카카오 로그인 뒤에 redirect 될 경로는 상황별로 세 종류가 있었는데,

1. 기본 home

2. 회원가입일 경우 회원정보 수정

3. 고유 링크로 접근시 다시 고유링크로 이동

 

if (response.data.tel === null) {
	nav.push(`/update-info`);
} else if (link != null) {
	sessionStorage.removeItem("apply_kakao");
	sendToApplyPage(link); // 고유링크 암호화 검증
} else {
	nav.push(`/`);
}

 

if문을 사용해서 분기했다!

신청 경로에서 로그인했을 경우 해당 경로를 session에 저장하고,

그 경로를 재검증해서 이동하는 방식을 사용했다.

 

추가적으로 footer를 구현하는 데 있어서, 출력되는 본문 내용이 짧으면 맨 아래에 위치하고

본문 내용이 길면 내용 뒤에 출력되게 하고 싶었는데 sticky 패턴이라고 이름도 있는 구현 방식이었다... ㅋㅋ

const AppContainer = styled.div`
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  overflow: hidden;
  width: 100%;
  max-width: 428px;
  margin: 0 auto;
  box-sizing: border-box;
  position: relative;
`;

const MainContent = styled.main`
  flex: 1;
  padding: 20px;
`;

const FooterContainer = styled.footer`
  height: 13vh;
  font-size: 15px;
  font-family: Nanum Pen Script;
  color: black;
  text-align: center;
`;

styled-component를 사용해서 구현했다.